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.