[RESOLVIDO] Hibernate - Problema inserir novo usuário

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

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

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?

[quote=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?[/quote]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. [=

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

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

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?

[quote=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?[/quote]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. [=

Beleza!

Mudarei tudo para fazer igual você faz :wink:

utilizarei EntityManagerFactory com:


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

pra depois fechar sempre assim

		dogDAO.commitAndCloseTransaction();