Uma coisa simples, porém não consigo resolver.
No banco tenho uma coluna com default value 1. Se dou um INSERT via MySQLQueryBrowser ele respeita esse default value.
Quando instancio a entidade dessa tabela no java e não seto o valor respectivo a essa coluna (pois no banco já existe um default), ele está colocando 0.
Há algo a ser adicionado nas Annotations para corrigir isso?
se não me engano, tem uma propriedade na @Column que diz qual é o default value, dá uma olhada
abraço
Lavieri
Vendramini87:
Olá,
Uma coisa simples, porém não consigo resolver.
No banco tenho uma coluna com default value 1. Se dou um INSERT via MySQLQueryBrowser ele respeita esse default value.
Quando instancio a entidade dessa tabela no java e não seto o valor respectivo a essa coluna (pois no banco já existe um default), ele está colocando 0.
Há algo a ser adicionado nas Annotations para corrigir isso?
abs,
André Vendramini
se vc anotou corretamente (ou seja, nos METODOS e nao nos FILDS) isso pode ser resolvido facilmente...
Apesar desse blog falar para colocar os atributos columnDefinition e nullable, eu apenas setei o valor inicial na declaração do atributo na classe:
private int status = 1;
Está certo? Apesar de ter funcionado…
abs,
André Vendramini
/EDITADO/
Olá, Lavieri! Não tinha visto seu post…
Realmente dessa forma funciona também, porém, preciso colocar a lógica no Java mesmo? Então não “serve para nada” setar default value no banco?
serve… serve pra quem for dar um insert sem o valor, ai ele setao valor…
o fato é
private int status; //esse trecheo é exatamente igual o abaixo
private int status = 0; //esse trecho é exatamente igual o de cima;
primitivos sempre tem valores defaults
porem deixar apenas o banco popular é errado, pois
seuObjeto.getStatus() … vai vim o valor zero, ate vc persistir, e ai ao persistir vai virar 1 … o que pode não estar conforme com sua lógica
root_
Exemplo de possível defaultValue…
publicclassTesteDefaultValue{@Id@Column(name="ID")privateintid;@Basic(optional=false)@Column(name="VALOR")privateBigDecimalvalorpublicTesteDefaultValue(){}publicintgetId(){returnid;}publicvoidsetId(intid){this.id=id;}publicBigDecimalgetValor(){returnvalor;}//O ESQUEMA ESTÁ AQUI NO SETTER....publicvoidsetValor(BigDecimalvalor){//Realize a verificação que desejar antes de setar o this.valor.//no caso abaixo estou verificando se o valor for null, então ele será ZERO,//pois no banco de dados esta colula é notNull.valor=valor==null?BigDecial.ZERO:valor;this.valor=valor;}}
Espero ter ajudado, pelo menos comigo funciona muito bem, principalmente quando se usa BeansBinding…