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 プロジェクトで省略したものはありますか。
どんな助けでも大歓迎です。