【发布时间】:2011-11-08 13:02:25
【问题描述】:
我们使用的是Hibernate Envers,遇到以下情况:
一个类BusinessObjectType和一个类Identity引用BusinessObjectType:
@Entity
@Table( name = "ID_IDENTITY" )
@Audited
public class Identity {
@ManyToOne
@JoinColumn( name = "BO_TYPE_ID" )
@IndexColumn( name = "INDEX_BO_BO_TYPE" )
private BusinessObjectType businessObjectType;
[…]
}
然后我们使用以下命令查询所有版本的 Identity:
AuditQuery auditQuery = auditReader.createQuery().forRevisionsOfEntity(
Identity.class,
false,
true );
auditQuery.add( AuditEntity.id().eq( dbid ) );
@SuppressWarnings( "unchecked" )
List< Object[]> history = (List< Object[]>) auditQuery.getResultList();
如果存储的身份没有BusinessObjectType(即businessObjectType 为空),则一切都像魅力一样。
如果身份有 businessObjectType != null,我们会收到“Javassist Enhancement failed”异常:
Javassist Enhancement failed: ch.ethz.id.wai.baseclasses.BusinessObjectType
该错误似乎与 Envers 尝试实例化 BusinessObjectType 相关,但我真的不知道问题出在哪里(如果我们不使用 AuditQuery,Hibernate 对这两个对象都没有问题)。
异常的原因是
java.lang.InstantiationException: ch.ethz.id.wai.baseclasses.BusinessObjectType_$$_javassist_49
没有堆栈跟踪。
关于问题可能是什么的任何提示?
【问题讨论】:
标签: hibernate hibernate-envers