当前位置: 首页 > 面试题库 >

要等于还是不对实体类进行哈希码处理,这就是问题所在

计弘
2023-03-14
问题内容

我一直在努力尝试最好的方法来处理在实体上实现哈希码和相等是否是一般的好习惯(我指的是一般意义上的实体,但在大多数情况下,它将是JPA实体)。

在Hibernate手册的第24章http://docs.jboss.org/hibernate/core/3.3/reference/en/html/best-
practices.html中,
它表示了这一点…

确定所有实体的自然键,并使用映射它们。实现equals()和hashCode()来比较组成自然键的属性。

拥有.equals和.hashcode仅包含这些自然键是有意义的,但是如果您拥有同一实体的多个实例(相同的自然ID,因此相同的哈希码)怎么办?似乎这种做法可能会对您的应用程序中的其他地方产生微妙的影响。之前有人大规模尝试过吗?


问题答案:

有时您希望Equals比较所有属性,而有时您希望Equals只是关键。使用显式的帮助程序类,我们获得了更多的成功,因此在比较什么方面没有歧义。

ByKeyComparer.Equals...
ByPropertiesComparer.Equals...

要么

Entity1.EqualsByKey...
Entity1.EqualsByProperties...


 类似资料:
  • 问题内容: 以下问题比最初看起来要复杂。 假设我有一个任意的JSON对象,其中可能包含任意数量的数据,包括其他嵌套的JSON对象。我想要的是JSON数据的加密哈希/摘要,而不考虑实际的JSON格式本身(例如:忽略换行符和JSON令牌之间的间距差异)。 最后一部分是要求,因为JSON将由许多不同平台上的各种(反)序列化器生成/读取。我知道至少有一个Java JSON库,该库在反序列化期间读取数据时会

  • 在我看到的关于重写的equals和hashcode方法的所有问题中,人们总是说,如果重写equals方法,那么也应该重写hashcode方法,反之亦然,以避免从哈希集合获取对象时出现问题。 就我个人而言,我认为反之亦然。让我们考虑一下,我们使用一个对象(带有属性)作为HashMap中的键,并且我们不需要测试该对象的两个实例之间的相等性。 如果我们以一种有效的方式(基于属性和其他规则)重写hashc

  • 这是一种可能会咬伤初学者的意外行为。首先,这是有意的吗?其次,Perl 6还使用哪些其他东西来猜测要创建哪个对象?它一开始是认为它是块还是散列,然后再更改,还是最终决定? 可以使用大括号和fat箭头构造哈希: 使用另一对表示法也会创建一个哈希。 但是,如果没有胖箭头,我会得到一个方块: 哈希文档只提到在大括号内使用$\uCode创建块。 还有其他方法可以定义哈希,但我询问的是这种特定的语法,而不是

  • 问题内容: 我时不时听到“使用bcrypt在PHP中使用密码,bcrypt规则存储密码”的建议。 但是什么呢?PHP不提供任何此类功能,维基百科对文件加密实用程序不屑一顾,而Web搜索仅显示了几种以不同语言实现的Blowfish实现。现在Blowfish也可以通过PHP在PHP中使用,但这对存储密码有何帮助?河豚是一种通用密码,它有两种工作方式。如果可以加密,则可以解密。密码需要单向散列功能。 有

  • 问题内容: 我一直在研究一些有关Java字符串加密技术的信息,但不幸的是,我还没有找到如何在Java中使用SHA-512对String进行哈希处理的很好的教程。我读了一些有关MD5和Base64的博客,但是它们并不像我想要的那样安全(实际上,Base64不是一种加密技术),所以我更喜欢SHA-512。 问题答案: 您可以将其用于SHA-512

  • 问题内容: 我目前使用nodejs创建一些实验项目。我已经用Spring编写了很多Java EE Web应用程序,并赞赏那里的依赖注入的简易性。 现在我很好奇:如何使用节点进行依赖注入?或者:我什至需要吗?是否存在替代概念,因为编程风格不同? 到目前为止,我在谈论简单的事情,例如共享数据库连接对象,但是我还没有找到一个令我满意的解决方案。 问题答案: 简而言之,您不需要像C#/ Java中那样的依