2017-02-06 8 views
0

現在、JaVers 3.0.0を使用しています。次の2つのエンティティAとBがあるとします.Aはリスト内のいくつかのBを追跡します。リスト内の削除されたオブジェクトを観察する

  • は空のリストを持つオブジェクトをコミット
  • オブジェクトをコミットします。

    @Entity 
    @TypeName("A") 
    public class A { 
    
        @Id 
        private int id; 
        private List<B> items; 
    
        public A() { 
         items = new ArrayList<>(); 
        } 
    
        public A(int id) { 
         this(); 
         this.id = id; 
        } 
    
        public int getId() { 
         return id; 
        } 
    
        public void setId(int id) { 
         this.id = id; 
        } 
    
        public List<B> getItems() { 
         return items; 
        } 
    
        public void setItems(List<B> items) { 
         this.items = items; 
        } 
    
    } 
    

    そして、ここでは

    @Entity 
    @TypeName("B") 
    public class B { 
    
        @Id 
        private int id; 
    
        public B() { 
        } 
    
        public B(int id) { 
         this.id = id; 
        } 
    
        public int getId() { 
         return id; 
        } 
    
        public void setId(int id) { 
         this.id = id; 
        } 
    
    } 
    

    は、タイプAのオブジェクトに3つの変更をコミットすることができます私たちではなく、単純なクラスBです。 2つの追加されたBを持つ

  • 1つのBが削除されたコミットオブジェクト
  • 私はB.

    上の変化を観察したいその後

Javers javers = JaversBuilder 
       .javers() 
       .build(); 

A a = new A(1); 
javers.commit("[email protected]", a); 

a.getItems().add(new B(1)); 
a.getItems().add(new B(2)); 
javers.commit("[email protected]", a); 

a.getItems().remove(0); 
javers.commit("[email protected]", a); 

List<Change> changes = javers.findChanges(
QueryBuilder.byClass(B.class) 
      .build()); 

String changelog = javers.processChangeList(changes, new SimpleTextChangeLog()); 
System.out.println(changelog); 

出力がゼロの変化を言います。私はBが実体であり、Idを持っているので、削除されたオブジェクトを見ることを期待していました。私は何が欠けていますか?

これまでのコメントにお返事ありがとうございます。たぶん私は十分な詳細されていなかった。申し訳ありません。

私が照会しようとしているのは、Aのすべての変更とBのすべての変更です。私はAのみをコミットしますが、それはおそらく問題ですか?私はAとBを追跡すべきですか?

+0

commitShallowDelete()を呼び出すことであるしかし、誰Bは変更されません。好奇心の代わりに 'A.class'を試しましたか?またはB.setIdを使用しましたか?私はあなたが変更ログを取得すると確信しています。 – Fildor

+0

@Fildorそれは本当ですが、単一のBは変更されませんでしたが、1つはAのリストから削除されました。 – raupach

+2

"1つのBは変更されませんでしたが、1つはAのリストから削除されました。 Aのインスタンスを照会しなければなりません。ただ、 'a'をコミットするだけのヒントがあるはずです。... – Fildor

答えて

1

javers.compare()javers.commit()は同じ方法では機能しません。 compare()は、コンテキストなしで2つのオブジェクトグラフを単純に比較します。 そのため、グラフを比較するときに変更リストにObjectRemovedが表示されることがあります。

ただし、commit()は変更を監査するためのものです。 両方のクラスをエンティティとしてマッピングしたので、それらは独立しています。 Bオブジェクトは、Aオブジェクトによって参照されなくなったため削除されたマークを付けることはできません。

削除(およびObjectRemoved変更を持っている)としてそれらをマークする唯一の方法は、

関連する問題