我需要对hashCode的实现和Hibernate实体的equals有一些想法。
主要目标是识别表示db中的行的两个相同对象,并将它们与未保存的对象区分开,并将项删除或添加到用Set<>表示的关系中。集合。
@Data
@MappedSuperclass
public class BaseEntity {
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
private static AtomicLong idGenerator = new AtomicLong(Long.MIN_VALUE);
@Transient
private long instanceId = idGenerator.incrementAndGet();
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || !(o instanceof BaseEntity)) return false;
BaseEntity c = (BaseEntity) o;
return (this.id != 0 && c.id != 0) && this.id == c.id;
}
@Override
public int hashCode() {
if (id != 0) { return (int) (id % Integer.MAX_VALUE); }
int i = (int) (instanceId % Integer.MAX_VALUE);
return i < 0 ? i : -i;
}
}