Мы используем 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
is и был null), все работает как шарм.
Если идентификатор имел businessObjectType != null
, мы получим "Javassist Enhancement failed" Exception:
Javassist Enhancement failed: ch.ethz.id.wai.baseclasses.BusinessObjectType
Ошибка, похоже, связана с Envers, пытающейся создать экземпляр объекта BusinessObjectType, но я не вижу, что может быть проблемой (у Hibernate нет проблем с обоими объектами, если мы не используем AuditQuery).
Причиной исключения является
java.lang.InstantiationException: ch.ethz.id.wai.baseclasses.BusinessObjectType_$$_javassist_49
без трассировки стека.
Любой намек на то, что проблема может быть?