Boa tarde amigos Java-Mens.
Estou precisando de trabalhar com informações de dois objetos do mesmo tipo preenchido com valores vindo do banco.
Exemplo:
Copo copo1 = (Copo) Requests.Select(session, "FROM Copos WHERE id= 150 ", null, 0).get(0);
// Cor atual no banco é Azu
copo1.setCor("Verde");
//Setei uma nova cor mais não persisti este objeto.
Copo copo2 = (Copo) Requests.Select(session, "FROM Copos WHERE id= "+copo1.getId(), null, 0).get(0);
//A cor deste objeto no banco ainda dever ser Azul
System.out.println("Cor do copo "copo2.getCor()");
// Mais a cor deste campo no banco ainda é Azul. Mais no meu objeto copo2.xpto já é verde.
O meu problema é que, sem eu persistir qualquer objeto junto ao banco, ele já está alterando o valor, alguém sabe o porque isso está acontecendo?
Tenho suspeita de ser o Lazy Fetching, andei dando uma olhada mais não tenho certeza disso.
Detalhe: Estou usando java 1.4.2_16, e Hibernate 3.2.1
Agradeço desde já.
Se dois objetos têm o mesmo ID, são o mesmo, portanto copo1 deve ser exatamente o mesmo objeto que copo2. Para comprovar isso, veja se copo1 == copo2.
[quote=thingol]Se dois objetos têm o mesmo ID, são o mesmo, portanto copo1 deve ser exatamente o mesmo objeto que copo2. Para comprovar isso, veja se copo1 == copo2.
[/quote]
Mais detalhe, eu alterei o objeto copo1 ao setar um novo valor para a cor, e o objeto dois eu estou pegando do banco ainda, sem ter em momento algum ter dado um save() ou saveOrUpdate();
nem se quer um commit; em minhas transactions.
Mas é o que o Hibernate faz.
Se 2 objetos têm o mesmo ID (supondo-se que ID seja a PK), são o mesmo objeto. Qualquer software de mapeamento objeto-relacional que se preza faz exatamente isso.
Ou seja, em vez de o Hibernate ir pegar do banco, lhe devolve o objeto que ele já lhe passou (você ainda não persistiu as informações, não é mesmo?)
Se você precisa de um outro objeto que é semelhante a outro exceto pelo ID, deve haver uma API do Hibernate que lhe permita fazer isso - não tenho certeza.