2011-11-08 62 views
9

如果你从db中加载一个实体并以某种方式修改它,hibernate会使用equals/hashCode比较实体的当前状态和它的快照以确定是否需要执行sql更新?hibernate如何使用equals()和hashCode()?

如果它做了这样的comprasions,我还有一个问题:如果equals会返回true,那么hibernate会认为该实体没有改变或试图使用它的默认的comprasion(可以肯定)?

回答

9

请参阅JBoss社区网站上的Equals and HashCode。从那里:

为了避免使用“半” -unique属性的持久化类的 来实现equals()这个问题,我们建议(和hashCode())。 基本上你应该认为你的数据库标识符根本没有 业务含义(请记住,代理标识符属性和 自动生成的值无论如何都是推荐的)。数据库 标识符属性应该只是一个对象标识符,基本上 应该只被Hibernate使用。当然,您也可以使用 数据库标识符作为方便的只读句柄,例如在Web应用程序中构建 链接。

换句话说,Hibernate使用equals和hashCode作为标识,而不是查看对象是否已被修改。它通过属性比较来使用属性。

+1

没有看到Hibernate在这个引用和页面中使用equals()和hashCode()的证据 – Lu55

3

不是Hibernate专家,但您可能会发现this手动启蒙部分。

相关问题