有一个lot of articles介绍了如何为JPA实体实现hashcode和equals。
与其为创建的每个单独的JPA实体担心这个问题,不如将final和updatable = false的id属性设置为UUID,并基于该id实现hashcode和equals,这样会更简单吗?这样做有什么缺点吗?
发布于 2018-01-06 18:04:26
既然可以基于MySQL或基于序列的主键实现equals和hashCode,为什么还要添加新的额外列或使用与AUTO_INCREMENTED聚集索引不兼容的UUID呢?
所以,这就是你的实现应该是什么样子:
@Entity
public class Book implements Identifiable<Long> {
@Id
@GeneratedValue
private Long id;
private String title;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Book)) return false;
Book book = (Book) o;
return getId() != null && Objects.equals(getId(), book.getId());
}
@Override
public int hashCode() {
return getClass().hashCode();
}
//Getters and setters omitted for brevity
}常量getClass().hashCode()值用于确保它在所有实体状态转换中都是一致的。
https://stackoverflow.com/questions/46530629
复制相似问题