繁体   English   中英

总是使用 UUID 作为 JPA 实体的 id 属性并在其上使用等于和哈希码?

[英]Always use a UUID for the id property of JPA entities and base equals and hashcode on it?

很多文章介绍了如何为 JPA 实体实现hashcodeequals

与其为创建的每个 JPA 实体都担心这一点,将finalupdatable = false id属性设置为UUID并将hashcodeequals实现基于该 id 会更简单吗? 这样做有什么缺点吗?

当您可以基于AUTO_INCREMENTED或基于 SEQUENCE 的主键实现equalshashCode时,为什么要添加新的额外列或使用不适用于 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM