java - 不同持久性上下文中的不同hashCode()?
问题描述
我在 Hibernate 中打开两个不同的会话,每个会话都运行自己的事务。每个会话从表中检索相同的实体。当我打印它们hashCode()
时,它们是不同的。为什么会这样?如果我们在同一个会话中检索相同的实体,那么它hashCode()
是相同的。这背后的原因是什么。
解决方案
如果我们在同一个会话中检索相同的实体,那么 hashCode() 是相同的。
预计 Hibernate 的第一级缓存(Session
此处)将在事务生命周期内加载在事务中的实体保持在缓存中。
该实体不会被第二次检索,它只是从缓存中检索。
每个会话从表中检索相同的实体。当我打印他们的 hashCode() 时,它们是不同的。
由于加载的实体不在会话之间共享,这意味着您没有覆盖hashCode()
实体。
因此,为了保证相同hashCode()
以及它们的相等性( ),如果有意义,请equals()
覆盖。equals()/hashCode()
推荐阅读
- python - 为什么此 Python 代码在执行后显示“TypeError:'int' object is not iterable”而没有任何问题?
- mysql - 条件选择语句中的自动增量临时列
- email - 电子邮件 UID_VALIDITY - 将电子邮件从垃圾邮件/存档移动到主收件箱
- azure - 属性“Country.IdCountry”属于“Guid”类型,当前数据库提供程序不支持
- ios - Firebase Crashlytics iOS 隐私设置
- java - DynamoDb 模型从 Java 实体扩展而来,该实体具有其他 Java 实体的字段
- android - Natviescript-Angular Android 应用程序:错误:无法加载标签栏图标:res://
.png - typescript - 在运行下一个循环之前,我们如何确保所有的承诺都得到解决
- ruby - 如何在 Ruby 中将多个符号分配给相同的值?
- cucumber - 将黄瓜报告替换为宁静报告