给定两行代码:
entityManager.find(MyEntity.class, myId);
((Session) getEntityManager().getDelegate()).load(MyEntity.class, myId);
第一条指令工作正常,但第二条指令抛出 org.hibernate.SessionException: Session is closed!。任何想法 ?
上下文:春季批处理 3.0.6 / 休眠 3.5.0
信息:EntityManager 被注入:
@PersistenceContext
protected EntityManager entityManager;
更新 1
如果会话为空(在 EntityManagerImpl.getRawSession 中),我可以在 find 方法中看到一个调用 this.getSession() 打开一个新会话
更新 2
在第二种情况下,不会调用 getSession 方法,而是调用一个名为 SharedEntityManagerCreator 的类来关闭会话:
if(isNewEm) {
EntityManagerFactoryUtils.closeEntityManager(target1);
}