Galera estou com uma pequena duvida, preciso mapear uma coluna sendo que ao ser gerada no banco ela tem que ter seu valor default = 0
Meu atributo é esse
@Column(name="vl_custo")
private Float vlCusto;
preciso que ele seja criado assim
vl_custo real NOT NULL DEFAULT 0,
Tem como fazer isso, mepeando o atributo?
http://www.hibernate.org/hib_docs/annotations/reference/en/html_single/:
@Column (
name=“columnName”; (1)
boolean unique() default false; (2)
boolean nullable() default true; (3)
boolean insertable() default true; (4)
boolean updatable() default true; (5)
String columnDefinition() default “”; (6)
String table() default “”; (7)
int length() default 255; (8)
int precision() default 0; // decimal precision (9)
int scale() default 0; // decimal scale
Pelo que vimos, é possível modificar o nome da coluna (como você já fez), o seu caráter nullable (no seu caso você quer NOT NULL, ou seja, teria de usar nullable=false ), mas não dá para especificar o default; talvez você tenha de experimentar com o parâmetro “columnDefinition”, ou seja, talvez você tenha de usar algo como columnDefinition=“real NOT NULL DEFAULT 0” por causa desse default que você não pode incluir como propriedade da anotação. De qualquer maneira, leia em http://blog.tremend.ro/2007/08/27/hibernate-annotations-default-value/ como é que ele usou “columnDefinition”.
//assim
@Column(name="vl_custo", nullable = false )
private Float vlCusto = 0f;
//ou assim
@Column(name="vl_custo", nullable = false, columnDefinition = "float default 0")
private Float vlCusto;
Mais detalhes:
http://www.hibernate.org/hib_docs/annotations/reference/en/html_single/
Valeu galera, muito obrigado pela ajuda
ficou assim
@Column(name="vl_custo", nullable = false, columnDefinition = "float default 0")
private Float vlCusto;
belatra
Fevereiro 24, 2010, 3:52pm
#5
Bom pessoal, depois de quebrar a cabeça quase meio dia… achei a solucao para Annotation do Hibernate na inserção de valores Default.
@Column(name = "DELETE_FLAG", columnDefinition = "NUMBER(2) default 0", insertable = false, updatable = true)
private Long deleteFlag ;
A grande mágica esta no: “insertable = false” pq ele nao ira passar esse atributo para o INSERT, logo o BD coloca o valor default:NUMBER(2) default 0"
depois o parametro: “updatable = true” é para poder mudar o valor do Delete_flag para “1” no futuro, caso necessario.
Espero ter ajudado
vitaaoo
Fevereiro 22, 2013, 12:33pm
#6
Eu sei que ja ta resolvido mas eu vou postar como EU tive que fazer porque o meu mapeamento eh em XML
O principio é o mesmo … (insert=“false”)
e no banco eu adicionei o valor default