我正在开发一个新应用程序,我需要一些有关如何实现equals方法和hashCode方法的帮助。我已经阅读了许多已经在SO上问过的问题,并且我还阅读了几篇博客文章,这些文章将我引向了这个问题。
首先是一些技术信息:我正在使用JPA(EclipseLink),并且该应用程序适用于Java EE。
在阅读完之后,您应该为hashCode和equals使用不可变的值,但是由于类中的字段通常是可修改的,因此您不能使用它们。也不能使用主键(JPA),因为在持久化之前没有主键。所以我在想的是使用UUID。对于equals和hashCode而言,但是我之前从未做过,所以我想知道是否有人认为这不好(为什么?)以及可能的弊端(除了获得相同ID的微小机会之外)?从一开始就使用UUID并将其分配给构造函数将为所有对象提供一个业务ID。我将使其变为不可变并将其保存到数据库中。
这种方法不好吗?
最佳答案
IMO UUID可以正常工作,我建议这样做。
我找不到这种方法的任何缺点,因为命中2个相同值的可能性是无限小的。