首页 > 解决方案 > 不同持久性上下文中的不同hashCode()?

问题描述

我在 Hibernate 中打开两个不同的会话,每个会话都运行自己的事务。每个会话从表中检索相同的实体。当我打印它们hashCode()时,它们是不同的。为什么会这样?如果我们在同一个会话中检索相同的实体,那么它hashCode()是相同的。这背后的原因是什么。

标签: javahibernateormpersistence

解决方案


如果我们在同一个会话中检索相同的实体,那么 hashCode() 是相同的。

预计 Hibernate 的第一级缓存(Session此处)将在事务生命周期内加载在事务中的实体保持在缓存中。
该实体不会被第二次检索,它只是从缓存中检索。

每个会话从表中检索相同的实体。当我打印他们的 hashCode() 时,它们是不同的。

由于加载的实体不在会话之间共享,这意味着您没有覆盖hashCode()实体。
因此,为了保证相同hashCode()以及它们的相等性( ),如果有意义,请equals()覆盖。equals()/hashCode()


推荐阅读