1

次のクラス階層があります。

class Incident {// Id => Entity
  @Id
  String id
  List<Participant> participants
  List<RealEstateProperty> realEstateProperties
}

どこ

class Participant {// No id => by javers terms - ValueObject
   EnclosedContact contact
}

class EnclosedContact {// No id => by javers terms - ValueObject
  String name
}

class RealEstateProperty {// No id => by javers terms - ValueObject
   List<CadastralSection> cadastralSections
}

class CadastralSection {// No id => by javers terms - ValueObject
  String sectionId
}

次のテストを(groovyで)作成しました:

def "Querying Javers Repository for participants changes works correctly"() {
    given:
    (1..3).each {
        javers.commit("author", new Incident(
            id: it,
            participants: [
                new Participant(contact: new EnclosedContact(id: 20 + it))
            ]
        ))
    }

    when:
    def snapshots = javers.findSnapshots(QueryBuilder.byValueObjectId(1, Incident.class, "contact").build())

    then:
    assert snapshots.size() == 1
}

このテストの結果は次のとおりです。

JaversException: PROPERTY_NOT_FOUND property 'contact' not found in class 'Incident'

この方法で変更を取得しようとしています

def snapshots = javers.findSnapshots(QueryBuilder.byValueObjectId(1, Incident.class, "participants/0/contact").build())

空のリストを返します。

Javars はネストされた ValueObject の変更の選択をサポートしていますか?

4

3 に答える 3

2

JaVers 1.6.2 では、ネストされた ValueObjects クエリの基本的なサポートがあります (まだ文書化されていません)。クエリは、この JaVers バージョンによって保持されるデータに対して機能するはずです。例えば:

def "should query for changes on nested ValueObjects stored in a list"(){
    given:
    def user = new DummyUserDetails(
        id:1,
        addressList: [new DummyAddress(networkAddress: new DummyNetworkAddress(address: "a"))])

    javers.commit("author", user)
    user.addressList[0].networkAddress.address = "b"
    javers.commit("author", user)

    when:
    def changes = javers.findChanges(QueryBuilder.byValueObjectId(1, DummyUserDetails,
            "addressList/0/networkAddress").build())

    then:
    changes.size() == 1
    changes[0].left == "a"
    changes[0].right == "b"
}
于 2016-04-14T06:11:00.033 に答える
1

一般的なネストされたオブジェクト コンパレータを作成しました。

https://gist.github.com/hank-cp/3db40faed1dd9f02ababd86c2c9eaf8d

次のように登録します。

NestedObjectComparator productRootComparator =
        new NestedObjectComparator<POProductRoot>() {};
sharedJavers = JaversBuilder.javers()
        .registerValue(POProductRoot.class)
        .registerCustomComparator(productRootComparator, POProductRoot.class).build();
productRootComparator.setJsonConverter(sharedJavers.getJsonConverter());

次に、変更結果をMapChangeフォーマットで取得します。

于 2016-08-11T02:44:12.583 に答える
0

JaVers 2.1 以降、このタイプのクエリ用の新しいフィルターchild-value-objects-filter があります。

于 2016-08-04T21:15:04.580 に答える