Hibernate com 'save' e 'get' com comportamentos estranhos

1 resposta
adrianostanley

Olá pessoal!

Não sei se isso é configuração de cache mas tenho um comportamento bem estranho em uma classe ao qual posso resumir da seguinte maneira:

Loja loja = new Loja();
LojaDAO.save(loja);

Carro carro = new Carro();
carro.setLoja(loja);
CarroDAO.save(carro);

Até aí tudo bem. Se eu faço:

Carro carro = CarroDAO.getByLoja(loja);

ele me retorna o carro ou a lista de carros corretamente inclusive o que eu salvei mais acima.

Porém, se eu faço isso:

Loja loja2 = LojaDAO.getByCodigo(loja.getCodigo());
Carro carro = CarroDAO.getByLoja(loja2);

ele retorna null! E o pior ainda, se eu faço isso:

Carro carro = CarroDAO.getByLoja(loja); //Aqui ele retorna o Carro corretamente!
Loja loja2 = LojaDAO.getByCodigo(loja.getCodigo()); //Mesmo não fazendo absolutamente nada com a loja2...
Carro carro = CarroDAO.getByLoja(loja); //Ele retorna null!

Já tentei dar evict na loja antes de carregá-la novamente, ou o flush, mas nada resolve. Imaginei que pudessem ser dois objetos iguais na sessão, mas ele não dá aquele erro clássico indicando isso, e infelizmente é uma situação que acontece pois estou em uma classe de testes que salva uma Loja e testando um serviço que carrega essa Loja pra buscar o Carro, ou seja, não há como, vai precisar ter duas lojas na session do Hibernate.

Um detalhe, minhas classes de teste abrem uma sessão que vai ser compartilhada por ela + o a classe de serviço (para poder fazer o rollback depois do serviço executar). Ou seja, isso tudo aí emcima acontece sob a mesma sessão aberta.

Muito obrigado a quem puder me ajudar a configurar algo se for necessário.

1 Resposta

CintiaDR

Coloca os trechinhos das entidades e as anotações, além dos trechos que recuperam os objetos do banco.

As conexões são abertas e fechadas em cada método da DAO ou é controlado de outra maneira?
De todo o jeito, é bem bizarro. Vc tem algum cache de second-level ou pool de conexões?

Criado 24 de agosto de 2011
Ultima resposta 26 de ago. de 2011
Respostas 1
Participantes 2