我想使用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报告 –