之前遇到过一个问题,就是两个对象比较完全不一样,但就是判断相等,十分神奇,,,
要注意,id,createTime,updateTime 这三个属性是父类的。两个对象的父类属性数据不一致,子类属性一致,为什么就判断两个对象相等呢
@Data相当于 @Getter,@Setter,@RequiredArgsConstructor,@ToString,@EqualsAndHashCode 这5个注解的合集。我们重点关注一下@EqualsAndHashCode(相当于@EqualsAndHashCode(callSuper = false)),默认@EqualsAndHashCode(callSuper = false),即重写子类的equals和hashcode不包含父类。好了,现在我们明白了,默认的@EqualsAndHashCode是不会进行父类属性的比较的,那我们加上@EqualsAndHashCode(callSuper = true) 就好了
好了,现在对象判断就没问题了,是我们想要的结果。但是这样一个个加又特别麻烦。我们就搞一个配置文件全局处理,文件名就叫 lombok.config
# 声明该配置文件是一个根配置文件,从该配置文件所在的目录开始扫描
config.stopBubbling=true
# 全局配置 equalsAndHashCode 的 callSuper 属性为true
lombok.equalsAndHashCode.callSuper=call
注意放的位置哦,是从该配置文件所在的目录开始扫描的。
比如上图这种,放在java包下面,java包中所有包含@Data的类都会加上@EqualsAndHashCode(callSuper = true) (不使用@Data是不会产生上面的问题的)