Application エンティティと User エンティティがあります。アプリケーションからユーザーへは 1 対多の関係があります。つまり、1 つのアプリケーションが複数のユーザーを持つことができます。
ユーザーを更新し、割り当てられたアプリケーションを変更します。これまでのところ、私は以下を持っています:
Diff diff = javers.compare(oldUser, newUser);
List<ReferenceChange> referenceChanges = diff.getChangesByType(ReferenceChange.class);
for (ReferenceChange referenceChange : referenceChanges) {
Object oldRef = referenceChange.getLeftObject().get();
Object newRef = referenceChange.getRightObject().get();
Diff refDiff = javers.compare(oldRef,newRef);
}
デバッグ中に以下の結果を見つけてください
。 Application/7', newRef:'com.ds.appmanager.services.domain.Application/3'}
oldRef
アプリケーション [applicationId=7, applicationName=KYC, applicationDesc=DEV_TEST, applicationLaunch=2016-12-31 00:00:00.0 , live=false]
newRef
アプリケーション [applicationId=3, applicationName=KYC, applicationDesc=help, applicationLaunch=Sat Mar 12 00:00:00 IST 2016, live=true]
両方のオブジェクトを javars.compare(oldRef,newRef) に渡すと、referenceChangesと同じ結果が得られます。applicationDesc、oldVal = DEV_TEST、newVal = hellp など、各プロパティの値の変更が表示されるはずだと思いました。
ここで何か不足していますか?私がやりたいことは、User オブジェクト内で参照される Application オブジェクトのプロパティの値の変更を取得することだけです。
PS: に変更Object oldRef = referenceChange.getLeftObject().get();
するとObject oldRef = referenceChange.getLeftObject();
、JaversException: CLASS_EXTRACTION_ERROR JaVers bootstrap error - Don't know how to extract Class from type 'T'.
更新
Debug
を実行しているときに ValueChanges を取得していないことに注意してくださいDiff refDiff = javers.compare(oldRef,newRef);
。次の変更が表示されます。
Diff:
1. NewObject{globalId:'com.ds.appmanager.services.domain.Application/7'}
2. ObjectRemoved{globalId:'com.ds.appmanager.services.domain.User/5'}
3. ObjectRemoved{globalId: 'com.ds.appmanager.services.domain.Application/3'}
4.ObjectRemoved{globalId:'com.ds.appmanager.services.domain.User/6'}
5.ObjectRemoved{globalId:'com.ds.appmanager .services.domain.User/7'}
6. ReferenceChange{globalId:'com.ds.appmanager.services.domain.User/3', property:'application', oldRef:'com.ds.appmanager.services.domain .Application/3', newRef:'com.ds.appmanager.services.domain.Application/7'}