在Hibernate中应如何实现模型类的equals和hashcode?有哪些常见的陷阱?默认实现在大多数情况下是否足够好?使用商务钥匙有什么意义吗?
在我看来,要考虑到延迟获取,ID生成,代理等,在每种情况下都无法正确工作。
Hibernate有何时/如何重写一个很好的和长期的描述equals()
/
hashCode()
在文档
要点是,如果您的实体将成为的一部分,Set
或者您要分离/附加其实例,则只需担心它。后者并不常见。前者通常最好通过以下方式处理:
equals()
/ hashCode()
基于业务密钥-例如,在对象(或至少会话)生存期内不会改变的属性的唯一组合。equals()
/ hashCode()
设置主键,System.identityHashCode()
否则以对象标识为基础。这里的 重要 部分是您需要在将新实体添加到其中并保留后 重新加载 Set;否则,您可能会遇到奇怪的行为(最终导致错误和/或数据损坏),因为您的实体可能会分配给与当前桶不匹配的存储桶hashCode()
。问题内容: 我应该如何实施和在Java下面的类? 问题答案: 在Eclipse中,右键单击->源->生成hashCode(),然后equals()给出以下信息: 我已选择代码作为唯一字段
问题内容: DISTINCT在JPA中使用哪一列,并且可以更改它? 这是使用DISTINCT的示例JPA查询: 哪一个没有多大意义-区别基于哪个列?是否在Entity上将其指定为注释,因为我找不到注释? 我想指定要区分的列,例如: 我正在使用MySQL和Hibernate。 问题答案: 更新:请参阅投票最多的答案。 我自己的已经过时了。 仅出于历史原因保留在这里。 在Joins中通常需要在HQL中
我正在尝试写一个持久性测试。我有一个Maven项目,我使用Arquillian和嵌入式glassfish容器,Hibernate(作为我的JPA提供商)和内存中的HSQLDB作为我的存储。 当我运行测试时,我得到一个语法异常(如果需要,我可以发布完整的堆栈跟踪: 日志似乎显示了正确创建的表: 我已经包括了我认为相关的文件 坚持。xml 波姆。xml 实体类 测试班 坚持不懈xml: pom.xml
问题内容: 控制器逻辑: 服务逻辑 怎么了 在90%的情况下,这将正常工作。 问题 我已经阅读了相关问题,并找到了上面看到的电话。它解决了大约50%的案件,但不是全部。 问题答案: 对于我们来说,一些不同的方法最终解决了StaleObjectException定期发生的问题: 检索对象后刷新对象解决了我们的大多数StaleObjectExceptions。尤其是在某人可能会从其他地方处理同一对象并
我有扩展其他抽象类JPA实体。我想使用@data来避免编写setter和getter,但我的equals和hashcode方法存在。 我得到警告,但我认为我不应该: 当我将@equalsandHashCode(callSuper=false)添加到@data中时,我得到:
我为这个特殊的问题找了很多,但我没有找到任何具体的解决办法。我在一个表中有一个复合主键,这个复合主键的一个字段是另一个表的复合主键的一部分。您可以说这个特定的字段是第二个表中的外键,但是在表定义中没有定义任何独占外键约束。对于第一个表中的每个rec,第二个表中可能有多条记录。我试图使用SPringBoot-JPA-Hibernate实现这一点,但无法实现。有人能帮我吗。以下是德泰:- 我有一个US