我正在开发一个新的应用程序,需要帮助实现equals方法和hashCode方法。我已经阅读了SO上许多已经提出的问题,并且也阅读了几篇博客文章,这些都引导我提出这个问题。
首先是一些技术信息:我正在使用JPA(EclipseLink),而应用程序是为Java EE而设计的。
根据我的阅读,您应该对hashCode和equals使用不可变值,但由于类中的字段通常是可修改的,因此不能使用它们。你也不能使用主键(JPA),因为在持久化之前你还没有主键。所以我想使用UUID。既用于equals,又用于hashCode,但我从未这样做过,所以我想知道是否有人认为这是不好的(为什么?)以及可能的缺点(除了极小的概率得到相同的ID之外)。 在构造函数中使用UUID并将其分配给所有对象将从一开始就为所有对象提供业务ID。并且我会使它不可变并将其保存到数据库中。
这种方法是否不好?