[RESOLVIDO] Hibernate - Problema inserir novo usuário

8 respostas
ninvit

Amigos,

Estou terminando um CRUD de usuários(que são controlados por Spring Security) e estou recebendo o seguinte erro:

Caused by: org.hibernate.HibernateException: Illegal attempt to associate a collection with two open sessions

O erro acontece somente quando eu tento atualizar ou remover o usuário adicionado.

Para adicionar, funciona perfeitamente…

meu Dao está assim:

public void remove(Usuario usuario) {
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction t = session.beginTransaction();
        session.delete(usuario);
        t.commit();
    }
    public void update(Usuario usuario) {
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction t = session.beginTransaction();
        session.update(usuario);
        t.commit();
    }

Espero que alguém possa dar alguma luz!

Abraços

8 Respostas

Hebert_Coelho

two open sessions Você tá fechando as sessões? Você está tomando cuidado para não abrir uma sessão dentro da outra?

ninvit

Fala, Herbert!

Meu problema está sendo exatamente este…
Não preciso guardar o usuário logado na sessão para poder navegar nas páginas, já que são controladas pelo spring security?
Alguma ideia?

Hebert_Coelho

ninvit:
Fala, Herbert!

Meu problema está sendo exatamente este…
Não preciso guardar o usuário logado na sessão para poder navegar nas páginas, já que são controladas pelo spring security?
Alguma ideia?

Até onde eu sei, security é apenas para segurança e não controle de transação.

Nos dois códigos você faz Transaction t = session.beginTransaction(); É disso que eu to falando. [=

ninvit

É verdade, faço sim.
Mas não há nenhum método sem o commit(). Não seria suficiente?

Hebert_Coelho

ninvit:
É verdade, faço sim.
Mas não há nenhum método sem o commit(). Não seria suficiente?
Commit você confirma que finalizou os dados. A transação tá lá feliz da vida.

ninvit

Entendi…

eu consigo adicionar o usuario, e está da mesma forma:

public void save(Usuario usuario) {
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction t = session.beginTransaction();
        session.save(usuario);
        t.commit();
    }

Mas o que explicaria eu não poder remover ou atualizar?

Tem alguma dica de como posso mudar pra não cair nesse problema de dua sessões abertas?

Hebert_Coelho

ninvit:
Entendi…

eu consigo adicionar o usuario, e está da mesma forma:

public void save(Usuario usuario) {
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction t = session.beginTransaction();
        session.save(usuario);
        t.commit();
    }

Mas o que explicaria eu não poder remover ou atualizar?

Tem alguma dica de como posso mudar pra não cair nesse problema de dua sessões abertas?

Talvez outros métodos estão sendo chamados. Não sei como o spring está tratando isso.

Dica? Feche a transação após utilizar. [=

ninvit

Beleza!

Mudarei tudo para fazer igual você faz :wink:

utilizarei EntityManagerFactory com:

public void commitAndCloseTransaction() {
		commit();
		closeTransaction();
	}

pra depois fechar sempre assim

dogDAO.commitAndCloseTransaction();
Criado 5 de fevereiro de 2013
Ultima resposta 5 de fev. de 2013
Respostas 8
Participantes 2