Conflito de objetos

3 respostas
P

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á.

3 Respostas

T

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.

P

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.

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.

T

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.

Criado 9 de maio de 2008
Ultima resposta 9 de mai. de 2008
Respostas 3
Participantes 2