[英]Always use a UUID for the id property of JPA entities and base equals and hashcode on it?
有很多文章介绍了如何为 JPA 实体实现hashcode
和equals
。
与其为创建的每个 JPA 实体都担心这一点,将final
和updatable = false
id
属性设置为UUID
并将hashcode
和equals
实现基于该 id 会更简单吗? 这样做有什么缺点吗?
当您可以基于AUTO_INCREMENTED
或基于 SEQUENCE 的主键实现equals
和hashCode
时,为什么要添加新的额外列或使用不适用于 MySQL 聚集索引的 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()
值用于确保它在所有实体状态转换中保持一致。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.