0

有以下两个类,通过多对一注解相关:

@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.(ModWorkUnit.java:48) org.hibernate .envers.event.AuditEventListener.onPostUpdate(AuditEventListener.java:165) org.hibernate.action.EntityUpdateAction.postUpdate(EntityUpdateAction.java:200) org.hibernate.action.EntityUpdateAction.execute(EntityUpdateAction.java:179) org.

有什么问题?

非常感谢!李维斯

4

1 回答 1

1

检查运行时使用的 jar 是否与用于编译代码的 jar 版本相同。

如果它不能解决您的问题(而且很可能不会),请将 Hibernate Tools 提供的 jar 放入您的类路径中,而不是您现在正在使用的那些。从技术上讲,如果您使用的一个 jar 包含使用另一个 jar 的特定版本编译的类,这与您在类路径中的版本不同,就会发生这种情况。

于 2010-08-16T18:35:29.620 回答