我有一个spring(boot)应用程序,我正在尝试使用hibernate enver。
以下 bar
函数抛出 IllegalStateException: EntityManager is closed
,而 foo
功能完美无瑕:
@Service
public class FoobarService {
private final EntityManager entityManager;
@Autowired
public FoobarService(EntityManager entityManager) {
this.entityManager = entityManager;
}
public Iterable<Foobar> foo() {
return entityManager.createQuery("select f from Foobar f", Foobar.class).getResultList();
}
public Iterable<Foobar> bar() {
System.out.println(entityManager.isOpen()); // <--- Returns true!
AuditReader auditReader = AuditReaderFactory.get(entityManager);
AuditQueryCreator queryCreator = auditReader.createQuery();
AuditQuery query = queryCreator.forRevisionsOfEntity(Foobar.class, true);
return query.getResultList();
}
}
有人知道为什么它说它关门了吗 foo
功能是否正常(如上所述)?
ps:为了简洁起见,我省略了maven依赖项和实体Map,因为它们都在工作。
编辑:
有件很奇怪的事我想不通。在 bar
函数,我们可以看到: entityManager.isOpen()
返回true ((Session) entityManager.getDelegate()).isOpen()
返回false
这个 AuditReaderFactory.get(EntityManager entityManager)
函数使用第二个,这就是为什么它抱怨会话关闭了而它没有关闭的原因。我不太明白为什么 delegate
已关闭,因此:
工厂为什么使用 entityManager
的代理?
为什么代理是关闭的?
暂无答案!
目前还没有任何答案,快来回答吧!