Dados não estão sendo atualizados na sessão

4 respostas
R

Tenho um cliente, no qual o relacionamento está configurado da seguinte maneira:

Cliente

id
nome
...

ContatoCliente

id
nome
@ManyToOne
cod_cliente

Então eu salvo um novo contato para esse cliente (que não possuía nenhum contato anteriormente) :

this.session = HibernateUtil.pegarSessao(id);
this.tx = this.session.beginTransaction();
			
this.session.merge(contatoCliente);
this.session.flush();
tx.commit();

Porém ao realizar uma nova busca:

this.session = HibernateUtil.pegarSessao(id);
this.tx = this.session.beginTransaction();

return this.session
			.createQuery("from ContatoCliente WHERE cli_codigo = ?")
			.setInteger(0, cliente.getCli_codigo())
			.list();

Esse lista ainda se encontra "atualizada", ela ainda está com 0 itens.

Tentei flush, clear, ... ESSE REGISTRO CONSTA NO BANCO
E se eu fechar e abrir a aplicação de novo ele vai aparecer.

Deve ser apenas algum detalhe que está me passando despercebido.
Acho que alguém já passou por isso, ou que gostaria de me ajudar?

4 Respostas

Lavieri

relacionamentos, tipo @OneToX, ManyToX
só são salvos mediantes anotação

cascade = CascadeType.ALL

R

Então… mesmo assim não está funcionando… Coloquei Cascade ALL, MERGE, … não deu certo

Um teste ao realizar a pesquisa, após ter salvo:

this.session = HibernateUtil.pegarSessao(id);
this.tx = this.session.beginTransaction();

System.out.println(this.session
            .createQuery(sql)
            .setInteger(0, cliente.getCli_codigo())
	.list().size());
			
this.session = HibernateUtil.getSessionFactory(id).openSession();
			
System.out.println(this.session
	.createQuery(sql)
	.setInteger(0, cliente.getCli_codigo())
	.list().size());

No primeiro caso me retorna 0, e no segundo 1.

Passei por problemas com as sessões ficarem abertas, então uso uma no contexto da sessionFactory.
Não fico abrindo sempre.Porém pelo que eu percebi no profiler após um commit na transação ele fecha a sessão atual e abre uma nova.

E após salvar um contato do cliente, faço um commit.O correto não seria carregar os contatos certo, já que está tendo um comportamento semelhante ao openSession? O que está errado, já que nem com o cascade pesquisou corretamente?

R

Alguém?

R

Mais um detalhe:

Ao tentar implementar o Spring no projeto (para ver se conseguia acabar de vez com esses problemas), me deparei com o seguinte:

-Ao utilizar getHibernateTemplate, ao salvar o contato ele me aparecia na lista normalmente.

PORÉM, ao utilizar createHibernateTemplate(HibernateUtil.getSessionFactory(id)); - pegar uma session factory que já existia conforme o banco de dados…

-Esse erro de não carregar voltou a acontecer…

Mas NÃO consigo resolver de jeito NENHUM :S

Criado 5 de março de 2010
Ultima resposta 9 de mar. de 2010
Respostas 4
Participantes 2