2017-05-03 12 views
1

データベースのテーブルに対して休止状態のエンティティを作成します。Hibernate @Audited:NOT_AUDITEDは変数に解決できません

エンティティAは、唯一の問題はEntityBはないがエンティティAは、@Auditedアノテーション(org.hibernate.envers.Audited)でマークされていることであるエンティティB

@Entity 
@Table(name="TABLE_A") 
@NamedQuery(.. query="SELECT n FROM EntityA n") 
public class EntityA { 
.... 
@ManyToOne(...) 
@JoinColumn(...) 
private EntityB b; 


@Entity 
@Table(name ="TABLE_B") 
@NamedQuery(.. query="SELECT n FROM EntityB n") 
public class EntityB { 
... 

を参照しています。

アプリケーションを公開するとき、私は、スタックトレースに次のエラーを取得する:org.hibernate.MappingException:によって引き起こさ

監査を受けていないエンティティEntityBにエンティティAから監査済関係!このようなマッピングは可能ですが、 ですが、@Audited(targetAuditMode = NOT_AUDITED)を使用して明示的に定義する必要があります。

私はprivate EntityB b@Audited(targetAuditMode = NOT_AUDITED)を追加した場合、Eclipseは私に次のエラーを与える

NOT_AUDITEDは、どのように私はこの問題を解決することができ、可変

に解決することはできませんか?

+0

エンバーズジャーは含まれましたか?依存? –

+0

はい;そうでなければeclipseは@ Audedアノテーションでエラーを表示しますが、そうではありません –

答えて

1

私はprivate EntityB b上記@Audited(targetAuditMode = NOT_AUDITED)追加した場合、Eclipseは私に

NOT_AUDITEDが変数

に解決することはできません、次のエラーを与えるあなたは適切targetAuditModeを使用していない。

@Audited(targetAuditMode = NOT_AUDITED) 

間違ってRelationTargetAuditMode.NOT_AUDITEDを使用し、NOT_AUDITEDだけでなく、 RelationTargetAuditModeはENUMであるため、定数の値にアクセスするにはRelationTargetAuditMode.CONSTANT_NAMEを使用します。

だから、それは次のようになります。

@Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED) 

ドキュメント:

そして、我々はそれがtargetAuditModeプロパティを使用する方法を示しHibernate Envers - Easy Entity Auditing Configuration、からそれを見ることができます:

場合ターゲットエンティティが監査されないリレーションを監査する必要があります(たとえば、ディクショナリのようなエンティティの場合変更する必要はありません)、@Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)で注釈を付けるだけです。エンティティの歴史的なバージョンを読むとき、関係は常に "現在の"関連するエンティティを指します

関連する問題