我想使用 JaVers 来跟踪我的 Java 对象的更改。基本示例运行良好,但我无法检测存储在集合中的对象的更改。
如果我扩展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