Boa tarde.
Tô com um problema ao trazer objetos de uma tabela… Os valores da coluna saldo que estão no banco são um, mas se eu testo na aplicação, com um dialog ou debug, o valores são outro.
Não sei se o problema tem a ver com o flush da session… Já testei de todas as formas e nada de vir corretamente. Estranho é que todas as outras listagens vêm corretamente.
Não sei se tem alguma relação, mas esse objeto que tá vindo com o saldo errado tem um relacionamento many-to-many assim:
Empenho:
@OneToMany(mappedBy = "chave.empenho")
public List<EmpenhoNotaFiscal> getLigacoes() {
if (ligacoes == null)
ligacoes = new ArrayList<>();
return Collections.unmodifiableList(ligacoes);
}
public void setLigacoes(List<EmpenhoNotaFiscal> ligacoes) {
this.ligacoes = new ArrayList<>(ligacoes);
}
NotaFiscal:
@OneToMany(mappedBy = "chave.notaFiscal")
public List<EmpenhoNotaFiscal> getLigacoes() {
if (ligacoes == null)
ligacoes = new ArrayList<>();
return Collections.unmodifiableList(ligacoes);
}
public void setLigacoes(List<EmpenhoNotaFiscal> ligacoes) {
this.ligacoes = new ArrayList<>(ligacoes);
}
Classe associativa entre elas duas:
@Entity
public class EmpenhoNotaFiscal {
@EmbeddedId
private EmpenhoNotaFiscalPK chave;
private BigDecimal valor;
// ############# \\
public EmpenhoNotaFiscalPK getChave() {
return chave;
}
public void setChave(EmpenhoNotaFiscalPK chave) {
this.chave = chave;
}
public BigDecimal getValor() {
return valor;
}
public void setValor(BigDecimal valor) {
this.valor = valor;
}
}
PK da classe associativa:
@Embeddable
public class EmpenhoNotaFiscalPK implements Serializable{
private static final long serialVersionUID = 1L;
@ManyToOne(cascade = CascadeType.ALL)
private Empenho empenho;
@ManyToOne(cascade = CascadeType.ALL)
private NotaFiscal notaFiscal;
// ############# \\
public Empenho getEmpenho() {
return empenho;
}
public void setEmpenho(Empenho empenho) {
this.empenho = empenho;
}
public NotaFiscal getNotaFiscal() {
return notaFiscal;
}
public void setNotaFiscal(NotaFiscal notaFiscal) {
this.notaFiscal = notaFiscal;
}
}
Tá mapeado corretamente?
O meu método salvar do dao:
public void salvar(T entidade) {
if (entidade == null) {
throw new IllegalArgumentException();
}
Session sessao = pegarSessao();
Transaction transacao = sessao.beginTransaction();
try {
sessao.saveOrUpdate(entidade);
transacao.commit();
} catch (ConstraintViolationException e) {
transacao.rollback();
throw e;
} finally {
sessao.close();
}
}