我們使用Hibernate Envers並具有以下情況:休眠Envers和「Javassist進行強化失敗」異常
類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 with:
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進行強化失敗」例外:
Javassist Enhancement failed: ch.ethz.id.wai.baseclasses.BusinessObjectType
的錯誤似乎與Envers試圖實例化一個BusinessObjectType,但我實在看不出有什麼問題可能是(如果我們不使用AuditQuery,Hibernate對兩個對象都沒有問題)。
異常的原因是
java.lang.InstantiationException: ch.ethz.id.wai.baseclasses.BusinessObjectType_$$_javassist_49
不具有堆棧跟蹤。
任何暗示問題可能是什麼?
獲取是默認值:SELECT。構造函數不公開。謝謝。我仍然需要理解爲什麼Envers想要實例化比純粹的Hibernate更多的東西。 – Matteo
爲什麼默認的構造函數是'public'?我看到一個潛在的衝突的答案[這裏](http://stackoverflow.com/questions/2935826/why-does-hibernate-require-no-argument-constructor#comment9688725_2971717) –