我想使用JaVers來跟蹤我的Java對象的更改。基本的例子工作正常,但我無法檢測到存儲在集合中的對象的更改。JaVers未檢測到集合中對象屬性的更改
如果我擴展ChangeLogExample.class示例以更改例如子座標之一:
public static void main(String[] args) {
Javers javers = JaversBuilder.javers().build();
Employee bob = new Employee("Bob", 9_000, "Scrum master");
javers.commit("hr.manager", bob);
// do some changes and commit
bob.setPosition("Team Lead");
bob.setSalary(11_000);
javers.commit("hr.director", bob);
bob.addSubordinates(new Employee("Trainee One"), new Employee("Trainee Two"));
javers.commit("hr.manager", bob);
bob.getSubordinates().get(0).setAge(42); // <<<< This is the change I want to detect
javers.commit("hr.manager", bob);
// when:
List<Change> changes = javers.findChanges(
QueryBuilder.byInstanceId("Bob", Employee.class).withChildValueObjects().build());
String changeLog = javers.processChangeList(changes, new SimpleTextChangeLog());
// then:
System.out.println(changeLog);
}
這是印在更新日誌:
commit 3.0, author: hr.manager, 2017-06-06 11:17:17
changed object: Employee/Bob
list changed on 'subordinates' property: [(0).added:'Employee/Trainee One', (1).added:'Employee/Trainee Two']
commit 2.0, author: hr.director, 2017-06-06 11:17:17
changed object: Employee/Bob
value changed on 'position' property: 'Scrum master' -> 'Team Lead'
value changed on 'salary' property: '9000' -> '11000'
所以換到第一下屬的年齡不會在更新日誌顯示。使用withChildValueObjects()
不會產生影響。
當我將更改單獨提交給Employee實例時,我得到了實習生年齡的變化,但這不是我想要的(也不是我想要的)。
所以我的問題是:如何讓更改顯示在ChangeLog中?
我使用JaVers 3.2.0
的Employee
類是從JaVers例子不變:https://github.com/javers/javers/tree/master/javers-core/src/test/java/org/javers/core/examples/model
的main()
方法是簡單地從https://github.com/javers/javers/blob/master/javers-core/src/test/java/org/javers/core/examples/ChangeLogExample.java
陰影物體看起來很有希望。用@ ValueObject來註釋所有的「依賴」類是否足夠了?有了我自己的測試類,這似乎就足夠了,儘管我確實收到了一些日誌消息,比如「添加缺少的父項:2.0 - > ...」 - 是一個問題嗎? –
是的,映射相關對象作爲@ValueObject應該做的工作。此日誌消息只是一個嘈雜的調試消息。別擔心。它應該在下一個版本中刪除。 thanx報告 –