使用UUID作为业务键和equals/hash方法

4

我正在开发一个新的应用程序,需要帮助实现equals方法和hashCode方法。我已经阅读了SO上许多已经提出的问题,并且也阅读了几篇博客文章,这些都引导我提出这个问题。

首先是一些技术信息:我正在使用JPA(EclipseLink),而应用程序是为Java EE而设计的。

根据我的阅读,您应该对hashCode和equals使用不可变值,但由于类中的字段通常是可修改的,因此不能使用它们。你也不能使用主键(JPA),因为在持久化之前你还没有主键。所以我想使用UUID。既用于equals,又用于hashCode,但我从未这样做过,所以我想知道是否有人认为这是不好的(为什么?)以及可能的缺点(除了极小的概率得到相同的ID之外)。 在构造函数中使用UUID并将其分配给所有对象将从一开始就为所有对象提供业务ID。并且我会使它不可变并将其保存到数据库中。

这种方法是否不好?

1个回答

4

我认为UUID完全可以胜任,而且我建议使用它。

我找不到这种方法的任何缺点,因为命中两个相同值的可能性是非常小的。


太棒了!因此,基于uuid实现equals和hashcode是一个好方法,并且它适应了良好的equals方法实现的要求。 - LuckyLuke

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接