Pessoal Boa tarde,
Estou com problema referente a abertura e fechamento de sessões do hibernate.
Ao tentar atualizar um objeto que contem relacionamento @ManyToOne com outros objeto, ocorre o seguinte erro:
org.hibernate.HibernateException: Illegal attempt to associate a collection with two open sessions
Com esse problema me surgiu uma dúvida, eu só preciso fechar minha sessão quando eu tenho uma transação?
Abaixo a classe que cria a factory:
public class ConnectionFactory {
private static final SessionFactory sessionFactory;
private static final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>();
static {
try {
sessionFactory = new AnnotationConfiguration().configure(
"hibernate.cfg.xml").buildSessionFactory();
} catch (Throwable th) {
throw new ExceptionInInitializerError(th);
}
}
public static Session getInstance() {
Session session = (Session) threadLocal.get();
session = sessionFactory.openSession();
threadLocal.set(session);
return session;
}
}
Classe dao que está ocorrendo o problema:
public class Cota_030Dao implements Cota_030Inter {
private Session session = null;
@Override
public void salvar(Cota_030 itemTabela) {
session = ConnectionFactory.getInstance();
Transaction tx = null;
try {
tx = session.beginTransaction();
session.save(itemTabela);
tx.commit();
} catch (HibernateException e) {
e.printStackTrace();
tx.rollback();
} finally {
session.close();
}
}
@Override
public void excluir(Cota_030 itensTabela) {
session = ConnectionFactory.getInstance();
Transaction tx = null;
try {
tx = session.beginTransaction();
session.delete(itensTabela);
tx.commit();
} catch (HibernateException e) {
e.printStackTrace();
tx.rollback();
} finally {
session.close();
}
}
@Override
public void atualizar(Cota_030 itensTabela) {
session = ConnectionFactory.getInstance();
Transaction tx = null;
try {
tx = session.beginTransaction();
session.update(itensTabela);
tx.commit();
} catch (HibernateException e) {
e.printStackTrace();
tx.rollback();
} finally {
session.close();
}
}
@Override
public Cota_030 getItemPorID(int codItem) {
session = ConnectionFactory.getInstance();
Cota_030 cota_030 = (Cota_030)session.get(Cota_030.class, codItem);
return cota_030;
}
}
Alguém poderia me ajudar?