在 Hibernate 中存储在 Set 中时的 equals() 和 hashCode()

2023-12-22

在 Hibernate 文档第 4.3 章中。 ”实现 equals() 和 hashCode() http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html_single/#persistent-classes-equalshashcode”他们写下了这样一句话:

“此外,如果一个实例未保存且当前位于 Set 中,则保存它将为该对象分配一个标识符值。如果equals() and 哈希码()基于标识符值,哈希码将会改变,从而破坏了 Set 的契约。”

我不明白它违反了什么合同以及它会带来什么问题。


a HashSet(受支持HashMap) 如果对象的哈希码不改变,则有效。那是因为它根据哈希码保存它们。

因此,如果您根据hashCode()放在标识符上,并放置没有标识符的实体,它们都将具有相同的哈希码。哪一个,如果他们也是equal(..)(它们将是),将不允许集合中有多个对象。

现在,如果该集合中有一些实体具有分配的标识符,而一个没有,稍后保存,则该集合将具有错误的哈希码。

另请检查这个问题 https://stackoverflow.com/questions/4388360/should-i-write-equals-methods-in-jpa-entities/4388453你有什么选择hashCode() and equals(..)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Hibernate 中存储在 Set 中时的 equals() 和 hashCode() 的相关文章

随机推荐