我使用Hibernate envers试图从Audit表中检索审计记录,但看到异常The associated entity manager is closed! Hibernate envers。下面是出现异常的代码。
public void returnUserAudit(){
AuditReader auditReader = AuditReaderFactory.get(entityManager);
return auditReader.createQuery().forRevisionsOfEntity(UserDetails.class, true, true)
.add(AuditEntity.property("userDetails.userId").eq(appId)).
add(AuditEntity.property("userDetails.email").eq(deplymntId)).
add(AuditEntity.property("status").eq("Approved")).
addOrder(AuditEntity.revisionNumber().desc()).
setMaxResults(recordLimit).getResultList();
}
java.lang.IllegalStateException: The associated entity manager is closed!
at org.hibernate.envers.internal.reader.AuditReaderImpl.checkSession(AuditReaderImpl.java:65) ~[hibernate-envers-5.3.10.Final.jar!/:5.3.10.Final]
at org.hibernate.envers.internal.reader.AuditReaderImpl.isEntityNameAudited(AuditReaderImpl.java:306) ~[hibernate-envers-5.3.10.Final.jar!/:5.3.10.Final]
at org.hibernate.envers.query.AuditQueryCreator.checkEntityAudited(AuditQueryCreator.java:346) ~[hibernate-envers-5.3.10.Final.jar!/:5.3.10.Final]
at org.hibernate.envers.query.AuditQueryCreator.forRevisionsOfEntity(AuditQueryCreator.java:169) ~[hibernate-envers-5.3.10.Final.jar!/:5.3.10.Final]
我会检查你的使用模式 entityManager
. 你要么是在某一时刻缓存了一个已打开的EM的实例,并试图在其被关闭后重新使用它,要么是该实例一开始就没有被正确打开。 不管是哪种情况,这都说明是用户的错误,而不是Envers的错误。