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

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

方苗宣
2023-03-14
问题内容

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

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

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

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

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

我还想念其他东西吗?


问题答案:

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

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

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



 类似资料:
  • 我已经习惯了从命令行使用XJC工具。但是我意识到我不能使用它生成带有和方法的Java类。我用了这个: 1.可以用CXF XJC Maven插件从DTD文件生成和方法吗?

  • 问题内容: 建议和有时是必要的,即表示值(类 值类 )来覆盖,[和任选]的方法。这些方法返回的值取决于类及其超类的成员变量的全部或子集。为了实现它们正常,你必须了解理论的一点点 散列 和代数和集理论的一点点(不要太多,几乎一切都在explaind 的javadoc 这些方法和有效的Java形式乔希布洛赫。) 在大多数情况下,此方法的实现遵循一个模板,并且IDE(如Eclipse JDT)包括生成它

  • 如果你有如下需求,你必须重载 equals() 和 hashCode() 方法: 想把持久类的实例放入 Set 中(当表示多值关联时,推荐这么做),而且 想重用脱管实例 Hibernate 保证,仅在特定会话范围内,持久化标识(数据库的行)和 Java 标识是等价的。因此,一旦我们混合了从不同会话中获取的实例,如果希望 Set 有明确的语义,就必须实现 equals() 和 hashCode()。

  • 我试图从一个XSD文件生成一个包含toString、equals和hashCode方法的Java类。我得到了toString的工作,但我无法弄清楚如何让CXF插件生成equals和hashCode方法。 这是我的XSD文件: 很好,我意识到工件不存在,但我不知道如何配置CXF插件来生成equals和hashCode方法。您知道如何配置CXF插件来生成equals和hashCode方法吗?提前感谢您

  • 问题内容: 我想检查实体是否在另一个实体的Collection成员中(或): 问题答案: 不必要。共有三个选项: 不要覆盖-因此您将使用实例。当您使用仅附加到会话的实体(因此保证是同一实例)的集合时,这很好。在许多情况下,这(对我而言)是首选方式,因为在覆盖时它需要较少的代码和较少的考虑 覆盖并带有业务密钥。那可能是识别实体的属性的子集。例如,对于一个好的企业密钥,可能是或。这被认为是好的做法。

  • 本文向大家介绍java中hashCode、equals的使用方法教程,包括了java中hashCode、equals的使用方法教程的使用技巧和注意事项,需要的朋友参考一下 前言 众所周知Java.lang.Object 有一个hashCode()和一个equals()方法,这两个方法在软件设计中扮演着举足轻重的角色。在一些类中重写这两个方法以完成某些重要功能。 1、为什么要用 hashCode()