Мы используем 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, но я не понимаю, в чем проблема (Hibernate не имеет проблем с обоими объектами, если мы не используем AuditQuery).
Причиной исключения является
java.lang.InstantiationException: ch.ethz.id.wai.baseclasses.BusinessObjectType_$$_javassist_49
без трассировки стека.
Есть подсказка, в чем может быть проблема?