ric*_*ich 2 java hibernate hibernate-envers
我没有使用envers很长时间,我遇到了一个问题,我似乎无法找到任何地方的答案.我试过谷歌搜索堆栈跟踪,但无济于事,所以我必须错过一些令人目眩的明显.每当我尝试在org.hibernate.envers.AuditReader中运行'find(class,versionNumber)'方法时,我似乎得到以下堆栈跟踪,以便在数据库中检索以前版本的Document类:
java.lang.NullPointerException
org.hibernate.envers.entities.EntityInstantiator.createInstanceFromVersionsEntity(EntityInstantiator.java:91)
org.hibernate.envers.entities.EntityInstantiator.addInstancesFromVersionsEntities(EntityInstantiator.java:113)
org.hibernate.envers.query.impl.EntitiesAtRevisionQuery.list(EntitiesAtRevisionQuery.java:110)
org.hibernate.envers.query.impl.AbstractAuditQuery.getSingleResult(AbstractAuditQuery.java:108)
org.hibernate.envers.reader.AuditReaderImpl.find(AuditReaderImpl.java:119)
org.hibernate.envers.reader.AuditReaderImpl.find(AuditReaderImpl.java:94)
com.example.repository.AbstractDocumentTypeManager.getVersion(AbstractDocumentTypeManager.java:221)
com.example.repository.AbstractDocumentTypeManager.getVersion(AbstractDocumentTypeManager.java:1)
com.example.logic.versioning.BaseVersioningService.getApprovedSnapshot(BaseVersioningService.java:54)
com.example.logic.versioning.BaseVersioningService$$FastClassByCGLIB$$d33887d.invoke(<generated>)
net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:191)
...
Run Code Online (Sandbox Code Playgroud)
导致此错误的代码如下.它发生在我的文档保存后,似乎在数据库中创建了适当的版本(document_AUD).
public Document getVersion(String objectId, Number version) {
AuditReader auditReader = getAuditReader();
/* at this point, i guarantee that neither objectId nor version are null. */
Document revision = auditReader.find(Document.class, objectId, version);
return revision;
}
public AuditReader getAuditReader() {
return AuditReaderFactory.get(entityManager);
}
Run Code Online (Sandbox Code Playgroud)
我的'文档'类注释如此......
@Entity(name = "document")
@DiscriminatorColumn(name = "DTYPE", discriminatorType = DiscriminatorType.STRING)
@Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)
@Cacheable(true)
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE, region = "modelObjectCache")
public abstract class Document<T extends Document<?>> extends ModelObject implements Serializable, Comparable<T>,
Versionable {
/* many properties of a Document here. There are 2 subclasses of Document, identified by a database discriminator. */
}
Run Code Online (Sandbox Code Playgroud)
请让我知道您需要更多代码才能正确找到此问题.
非常感谢阅读,欢迎任何建议,
丰富.
好吧,我似乎找到了答案 - 当你在AuditReader上运行find方法时,你必须实际发送实现类而不是抽象超类.所以,例如,我说,
Document revision = auditReader.find(Document.class, objectId, version);
Run Code Online (Sandbox Code Playgroud)
我实际上需要把:
Document revision = auditReader.find(DocumentImplementation.class, objectId, version);
Run Code Online (Sandbox Code Playgroud)
奇妙.
| 归档时间: |
|
| 查看次数: |
1834 次 |
| 最近记录: |