Hibernate.Envers: @Audited at @ManyToOne выдает исключение

Существуют следующие два класса, связанных многоконтурной аннотацией:

@Entity
public class Firma {
  @Id
  @GeneratedValue
  private int id;

  @OneToMany(mappedBy = "firma")
  private List<Mitarbeiter> mitarbeiter;

  //getter und setter methods
}

@Entity
public class Mitarbeiter {
  @Id
  @GeneratedValue
  private int id;

  @Audited()
  private String name;

  @ManyToOne
  @Audited(targetAuditMode=RelationTargetAuditMode.NOT_AUDITED)
  private Firma firma;

  //getter und setter methods
}

Если я удаляю @Audited(...), а затем сохраняю Mitarbeiter, все работает нормально. Но с @Audited-Annotation выдается следующее исключение:

java.lang.NoSuchMethodError: org.hibernate.persister.entity.EntityPersister.getIdentifier (Ljava / lang / Object; Lorg / hibernate / engine / SessionImplementor;) Ljava / io / Serializable; org.hibernate.envers.tools.Tools.getIdentifier (Tools.java:67) org.hibernate.envers.tools.Tools.entitiesEqual (Tools.java:50) org.hibernate.envers.entities.mapper.relation.ToOneIdMapper. mapToMapFromEntity (ToOneIdMapper.java:71) org.hibernate.envers.entities.mapper.MultiPropertyMapper.map (MultiPropertyMapper.java:86) org.hibernate.envers.synchronization.work.ModWorkUnit. (ModWavahnit. or.envers.event.AuditEventListener.onPostUpdate(AuditEventListener.java:165) org.hibernate.action.EntityUpdateAction.postUpdate(EntityUpdateAction.java:200) org.hibernate.action..engine.ActionQueue.execute(ActionQueue.java:279) org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:263) org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:16nate) org.hiber.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321) org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:50) org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1027) org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:365) org.hibernateDtransaction. commit (JDBCTransaction.java:137) org.hibernate.ejb.TransactionImpl.commit(TransactionImpl.java:54)

В чем проблема?

Спасибо! джинсы

1 ответ

Убедитесь, что файлы jar, используемые во время выполнения, имеют ту же версию, что и файлы jar, используемые для компиляции кода.

Если это не решит вашу проблему (и, скорее всего, не решит), поместите jar-файлы, предоставляемые Hibernate Tools, в ваш путь к классам вместо тех, которые вы используете прямо сейчас. Технически, это может произойти, если один из используемых вами jar-файлов содержит классы, которые были скомпилированы с использованием определенной версии другого jar-файла, который отличается от того, который у вас есть в вашем classpath.

Другие вопросы по тегам