对于JPA实体,hashCode和equals

时间:2018-01-17 20:25:05

标签: java hibernate jpa equals hashcode

我需要对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;
    }
}

0 个答案:

没有答案