首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >总是使用UUID作为JPA实体的id属性,并在其上使用equals和hashcode?

总是使用UUID作为JPA实体的id属性,并在其上使用equals和hashcode?
EN

Stack Overflow用户
提问于 2017-10-03 01:30:45
回答 1查看 405关注 0票数 2

有一个lot of articles介绍了如何为JPA实体实现hashcodeequals

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

EN

回答 1

Stack Overflow用户

发布于 2018-01-06 18:04:26

既然可以基于MySQL或基于序列的主键实现equalshashCode,为什么还要添加新的额外列或使用与AUTO_INCREMENTED聚集索引不兼容的UUID呢?

所以,这就是你的实现应该是什么样子:

代码语言:javascript
复制
@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()值用于确保它在所有实体状态转换中都是一致的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46530629

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档