JPA - Hibernate会话已关闭,但是entitymanager工作正常

时间:2016-03-17 16:40:18

标签: hibernate jpa entitymanager hibernate-session

给出两行代码:

@PersistenceContext
protected EntityManager entityManager;

第一条指令工作正常,但第二条指令抛出org.hibernate.SessionException:会话关闭!有什么想法吗?

上下文:spring batch 3.0.6 / hibernate 3.5.0

信息:注入EntityManager:

if(isNewEm) {
  EntityManagerFactoryUtils.closeEntityManager(target1);
}

更新1

我可以在find方法中看到对this.getSession()的调用,如果会话为null(在EntityManagerImpl.getRawSession中),则打开一个新会话

更新2

在第二种情况下,getSession方法不是调用,而是一个名为SharedEntityManagerCreator的关闭会话的类:

  In[5]:df
  Out[5]:
            id         col2         col3
  0         1           2            5 
  1         1           2            2 
  2         2           8            3 
  3         2           3            6  
  4         2           3            1 
  5         1           3            7 
  6         2           5            6 
  7         1           8            6

1 个答案:

答案 0 :(得分:1)

通过适当的JPA事务管理,底层的Hibernate Session应该已经打开。如果您正在使用声明式事务管理(基础事务管理器应该知道JPA),请确保使用@Transactional注释您的服务方法。如果您不使用声明式事务管理,可以调用

entityManager.getTransaction().begin();

完成后,请不要忘记关闭与commit()rollback()的交易。