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?
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[/quote]
se vc anotou corretamente (ou seja, nos METODOS e nao nos FILDS) isso pode ser resolvido facilmente…
@Id @GeneratedValue
public Long getId() {}
//varios getters and/or setters
//agora vem a parte importante
public Integer getColunaEmQuestao() {
return colunaEmQuestao == null ? 1 : colunaEmQuestao;
}
}[/code]
Caso suas anotacoes nao estejam nos metodos, e sim nos fields, ai vc vai ter q fazer outra abordagem.
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?[/quote]
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
public class TesteDefaultValue{
@Id
@Column(name= "ID")
private int id;
@Basic(optional = false)
@Column(name = "VALOR")
private BigDecimal valor
public TesteDefaultValue()
{
}
public int getId()
{
return id;
}
public void setId(int id)
{
this.id = id;
}
public BigDecimal getValor()
{
return valor;
}
//O ESQUEMA ESTÁ AQUI NO SETTER....
public void setValor(BigDecimal valor)
{
//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…