2016-06-22 16 views
0

AとBの2つのエンティティがあるとします。AはBと@OneToManyの関係を持ち、Bのすべてのプロパティを監査しました。Enversを使用してリビジョンを取得すると、A Bのプロパティの変更を取得する必要があります。これを行う方法はありますか?Hibernate Envers - @OneToMany関係にあるエンティティの変更を監査する方法は?

ありがとうございます!私は以下のマッピングの推定をオフに働いています

+0

リレーションの '@ Audited'アノテーションで' org.hibernate.envers.global_with_modified_flag'を使うか 'modifiedFlags = true'を設定していますか? – Naros

+0

どこにタグを配置しますか?関係またはエンティティBのプロパティ – codenoob

+0

エンティティBは@auditableとマークされていますか? –

答えて

1

@Entity 
@Audited 
public class EntityA { 
    /* other properties & getters/setters */ 
    @OneToMany(mappedBy = "a", cascade = CascadeType.ALL) 
    private List<EntityB> bList; 
} 

@Entity 
@Audited 
public class EntityB { 
    /* other properties & getters/setters */ 
    @ManyToOne 
    private EntityA a; 
} 

いつでもあなたはEntityAからEntityBを追加/削除、これが追加されEntityAだけでなく、関連するEntityBに関連付けられているリビジョンの変更をトリガーします/関係のため削除されました。

しかし、あなたは、あなたがEntityA時には直接影響を与えないEntityBのいくつかの属性を変更することにした場合、唯一のEntityBなくEntityAのために生成リビジョンがあるだろう、以下を参照してください。

entityManager.getTransaction().begin(); 
final EntityA a = entityManager.find(EntityA.class, aId); 
for (EntityB b : a.getbList()) { 
    b.setName(b.getName() + "-modified"); 
} 
entityManager.merge(a); 
entityManager.getTransaction().commit(); 

あなたは、この場合にEntityBの個々の改正が必要な場合は、実際には、特に代わりAuditReaderインタフェースを介してEntityBを照会する必要があります。

+0

ありがとう、これは私が頑張ったものです、私はそれを試し、あなたに知らせるでしょう。 – codenoob

関連する問題