不同持久性上下文中的不同hashCode()?

时间:2018-10-12 18:48:53

标签: java hibernate orm persistence

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

1 个答案:

答案 0 :(得分:4)

  

如果我们在同一会话中检索到同一实体,则   hashCode()相同。

预计Hibernate的第一级缓存(此处为Session)会将实体加载到事务中的实体保持在缓存中,以延长事务的使用寿命。
该实体不会第二次检索,而只是从缓存中检索。

  

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

由于未在会话之间共享已加载的实体,这意味着您没有为该实体覆盖hashCode()
因此,为了保证相同的hashCode()以及它们的相等性(equals()),请在合理的情况下覆盖equals()/hashCode()