Moh*_*aan 3 java spring java-8 spring-boot
我想编写一个通用函数,它接受同一实体类的两个对象并比较不同的字段,并返回随时间对特定字段所做的所有更改的列表。
许多实体类之一是 Member,如下所示
public class Member {
String firstName;
String lastName;
String driverLicenseNumber;
Integer age;
LocalDateTime timestamp;
}
Run Code Online (Sandbox Code Playgroud)
在数据库中,我有一个名为 member_audit 的表,每当使用触发器在成员表中发生更改时,该表都会填充旧数据(对于其他实体也类似)。
我要返回的每个实体的资源列表类似于
public class MemberAuditsResource {
private String field;
private LocalDateTime on;
private String changeType;
private String oldValue;
private String newValue;
}
Run Code Online (Sandbox Code Playgroud)
我只能想到像这样为每个实体分别编写一个函数
private List<MembeAuditsResource> memberCompare(Member obj1, Member obj2) {
//Compare every field in both the objects using if else and populate the resource.
}
Run Code Online (Sandbox Code Playgroud)
然后调用上面的函数来比较entity_audit表中的每对记录。代码将非常大,无法比较每个字段并乘以不同的实体。有没有更好、更有效的方法呢?
如果将思想扩展到比较对象图,这不是一个小问题。因此,有效的方法不是重新发明轮子,而是使用现有的库,例如JaVers:
Member oldMember = new Member("foo" ,"chan" ,"AB12" , 21 ,LocalDateTime.now());
Member newMember = new Member("bar" ,"chan" ,"AB12" , 22 ,LocalDateTime.now());
Diff diff = javers.compare(oldMember, newMember);
for(Change change: diff.getChanges()) {
System.out.println(change);
}
Run Code Online (Sandbox Code Playgroud)
然后,你可以得到类似的东西:
ValueChange{ 'firstName' changed from 'foo' to 'bar' }
ValueChange{ 'age' changed from '21' to '22' }
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5095 次 |
最近记录: |