一尘不染

在equals和hashcode方法中使用自动生成的Hibernate实体对象的id

hibernate

我已决定在多个hibernate实体/域对象的equals()和hashcode()中使用自动生成的ID。

但是,许多网站都说您永远不要这样做,因为存在在比较对象或使用哈希码的过程中将对象第一次持久保存到数据库的风险。

我的观点是,在大多数用例中,这比其他任何要更改的领域都不太可能。

单个域对象在首次创建时就会生成一次ID,而几乎每个其他字段都有机会在正常业务流程中进行更改(甚至可以更改唯一的用户名…)。

而且在我的许多域对象中,唯一ID几乎是唯一需要考虑的唯一字段(人,地址,宠物,…客户等)?组合字段是一个好主意,但是 从不
使用自动生成的ID,我认为,不是很好的建议。

我还想念其他东西吗?


阅读 292

收藏
2020-06-20

共1个答案

一尘不染

您应该在Hibernate Community
Wiki上阅读Equals和HashCode

equals并暗示不使用数据库标识符的主要原因hashCode是要处理存储的但不是持久的实体。在持久化之前,所有实例都将是equal,除非您注意显式处理该情况。

如果您知道您不会遇到这种情况,并且确保已对其进行了充分的记录,则可能会很好。您以后总是可以更改实现。

2020-06-20