Comportamento estranho do Hibernate

4 respostas
Claudio_Seabra

Executo duas querys e o resultado da segunda é sempre igual ao da primeira. E na realidade NÃO é! Executei os SQLs que essas querys geram diretamente no banco e me retornaram resultados diferentes.

Alguém tem idéia do que possa ser?

Grato

Query q = bd.getSession().createQuery("from Book as b where b.bookingRef = 319862");
	List<Book> bkctns = q.list();
	for(Book bkctn : bkctns){
		System.out.println(bkctn.getBookingRef());
		System.out.println(bkctn.getTp());
	}
	
	Query q2 = bd.getSession().createQuery("from Book as b where b.bookingRef = 313271");
	List<Book> bkctns2 = q2.list();
	for(Book bkctn1 : bkctns2){
		System.out.println(bkctn1.getBookingRef());
		System.out.println(bkctn1.getTp());
	}

4 Respostas

Hebert_Coelho

Primeira coisa que eu pensei: “Chuta que é macumba!”

Segunda coisa que eu pensei: “Não será que seu método de consulta está chamado um outro código? alguma coisa hard coded?”

Terceira coisa que eu pensei: Não seria problema de hashCode/equals?

Claudio_Seabra

@Hebert tô começando a achar que é a primeira opção viu, só pode ser macumba!

“hashCode/equals” acredito que não deva ser, pois o parâmetro utilizado não é a chave da entidade.

HardCoded também … impossível.

O hibernate nessa me pegou!! Estou utilizando 4.1.6 FINAL.

Claudio_Seabra

Inverti a posição das Querys e o resultado foi o mesmo, ou seja, ambos os retornos são iguais ao primeiro retorno.

:x

Y

Parece que ele esta retornando o mesmo objeto cacheado.

Habilite o log de sql e veja as queries que ele esta executando.

Se por acaso a session ja tiver o objeto no seu cache (um objeto com o mesmo id), ele nao vai bater no banco de novo, vai ter retornar o do cache.

O codigo é exatamente este ou voce só deu um exemplo e o código real é mais completo?

Criado 22 de outubro de 2012
Ultima resposta 22 de out. de 2012
Respostas 4
Participantes 3