Am使用spring web和hibernate。 我需要比较两个相同类型的复杂DTO,一个通过POST请求正文接收,另一个从DB获取。 此DTO中至少有几百个属性和子对象列表..我必须比较这两个DTO,以检查是否修改了除几个属性(20个属性)以外的任何字段..有人可以给我一些建议吗关于如何轻松完成此操作..
答案 0 :(得分:0)
如果您创建一个可以接收其自身两个对象并通过检查某些属性进行比较的Class方法,则可能会起作用。
class MyClass {
(...)
public static int compare (MyClass m1, MyClass m2){
if (m1.name == m2.name){ return 1; }
return 0;
}
}
您还可以检查“可比较”界面(这是一个更好的解决方案):https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html
希望它会有所帮助:)
答案 1 :(得分:0)
如果我有一个变量x
,那么我会做些事情并问“ x
改变了吗?”,如果不知道x
的初始值和最终值,就无法回答该问题。 。因此,如果要检查某些字段是否发生更改,则必须阅读并比较这些字段的初始值和最终值。
您可以通过缓存对象的哈希码来提高效率,如果哈希码不同,则可以知道对象是不同的,但是计算哈希码仍需要读取所有字段。
我想说的只是使用equals方法,大多数IDE仍然可以自动生成其中的大部分内容。
答案 2 :(得分:0)
我建议使用Decorator设计模式,而不是创建Utils类或将参数设置为null并在比较后恢复。
Here是一个实施建议,您只需要覆盖equals()