0

Hibernate Envers を使用してエンティティの履歴を記録しようとしました。しかし失敗しました。

私のプロジェクトでは、Spring 3.1、JPA、および Spring Data JPA (Hibenrate 4.1) を使用しました。

ベースクラスがあります。

コード:

@javax.persistence.MappedSuperclass
public abstract class BaseEntity implements Serializable {



    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id", columnDefinition = "INT unsigned", nullable = false)
    @RevisionNumber
    public Long id;



    @Version
    @Column(name = "jpaversion", nullable = false, columnDefinition = "INT unsigned")
   @RevisionTimestamp
    public Long version;



    public Long getId() {
   return id;
    }



    public void setId(Long id) {
   this.id = id;
    }



    public Long getVersion() {
   return version;
    }



    public void setVersion(Long version) {
   this.version = version;
    }



    @Override
    public int hashCode() {
   final int prime = 31;
   int result = 1;
   result = prime * result + ((id == null) ? 0 : id.hashCode());
   return result;
    }



    @Override
    public boolean equals(Object obj) {
   if (this == obj)
       return true;
   if (obj == null)
       return false;
   if (getClass() != obj.getClass())
       return false;
   BaseEntity other = (BaseEntity) obj;
   if (id == null) {
       if (other.id != null)
      return false;
   } else if (!id.equals(other.id))
       return false;
   return true;
    }



}

@RevisionEntity をエンティティに追加したとき。

コード:

@Entity
@RevisionEntity
@Table(name = "user", uniqueConstraints = {
    @UniqueConstraint(name = "UQ_gsmPrefix_gsmNumber", columnNames = {"gsm_prefix", "gsm_number"}),
    @UniqueConstraint(name = "UQ_email", columnNames = "email"),
    @UniqueConstraint(name = "UQ_username", columnNames = "username")})
@NamedQueries({
    @NamedQuery(name = "User.findByUsername", query = "select u from User u where u.username=:username"),
    @NamedQuery(name = "User.findByEmail", query = "select u from User u where u.email=:email")})
@Access(AccessType.FIELD)
public class User extends BaseEntity implements UserDetails, Serializable {

コード:

@Entity @Table(name = "address") @RevisionEntity public class Address extends com.dna.bifincan.model.BaseEntity

プロジェクトをTomcatにデプロイすると、このような例外が発生しました。

見積もり:

org.springframework.beans.factory.BeanCreationException: 'org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor#0' という名前の Bean を作成中にエラーが発生しました: Bean の初期化に失敗しました。ネストされた例外は org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in URL [jar:file:/E:/MyWorks/bifincan/project/bifincan-website/target/fi/WEB-INF] /lib/bifincan-library-1.0-SNAPSHOT.jar!/common/data-access.xml]: init メソッドの呼び出しに失敗しました。ネストされた例外は javax.persistence.PersistenceException: [PersistenceUnit: bifincan] Unable to build EntityManagerFactory at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:527) at org.springframework.beans です。java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java: 1110) で java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) で java.lang.Thread.run(Thread.java:722) で 原因: org.springframework.beans.factory.BeanCreationException: エラーURL [jar:file:/E:/MyWorks/bifincan/project/bifincan-website/target/fi/WEB-INF/lib/bifincan-library-1.0-SNAPSHOT.jar!/ common/data-access.xml]: init メソッドの呼び出しに失敗しました。ネストされた例外は javax.persistence.PersistenceException: [PersistenceUnit: @RevisionEntity でアノテーションを付けることができるエンティティは 1 つだけです。org.hibernate.envers.configuration.RevisionInfoConfiguration.configure(RevisionInfoConfiguration.java:264) で org.hibernate.envers.configuration.AuditConfiguration.(AuditConfiguration.java:102) で org.hibernate.envers.configuration.AuditConfiguration.getFor( org.hibernate.internal.SessionFactoryImpl の org.hibernate.envers.event.EnversIntegrator.integrate(EnversIntegrator.java:64) の AuditConfiguration.java:165)。(SessionFactoryImpl.java:302) org.hibernate.cfg.Configuration のbuildSessionFactory(Configuration.java:1740) at org.hibernate.ejb.EntityManagerFactoryImpl.(EntityManagerFactoryImpl.java:88) at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:904) ... 71 もっと見る

明らかに、@Entity と @RevisitonEntity を一緒に使用しましたが、それでもこの情報が報告されます。

Hibernate Dev Guide の関連セクションのドキュメントを読みましたが、persistence.xml または hibernate 構成に追加の構成は必要ないようです。Spring プロジェクトで省略したものはありますか。

どんな助けでも大歓迎です。

4

1 に答える 1

1

エンティティに で注釈を付ける必要があるのはなぜ@RevisionEntityですか?

@RevisionEntityリビジョン自体を表す特別な目的のエンティティです。Envers によって監査されるエンティティを作成する場合は、エンティティに で注釈を付けます@Audited

于 2012-06-21T07:38:40.397 に答える