Java hibernate如何使用equals()和hashCode()?

Java hibernate如何使用equals()和hashCode()?,java,hibernate,equals,hashcode,Java,Hibernate,Equals,Hashcode,如果您从db加载一个实体并以某种方式对其进行修改,hibernate是否会使用equals/hashCode将实体的当前状态与其快照进行比较,以确定是否需要执行sql更新 如果它做了这样的压缩,我还有另一个问题:如果equals将返回true,hibernate会认为实体没有更改,还是会尝试使用它的默认压缩(当然)?不是hibernate专家,但您可能会发现手册的一节很有启发性。请查看JBoss社区网站。从那里: 为了避免这个问题,我们建议使用“半”唯一属性 要实现equals()(和hashC

如果您从db加载一个实体并以某种方式对其进行修改,hibernate是否会使用equals/hashCode将实体的当前状态与其快照进行比较,以确定是否需要执行sql更新


如果它做了这样的压缩,我还有另一个问题:如果equals将返回true,hibernate会认为实体没有更改,还是会尝试使用它的默认压缩(当然)?

不是hibernate专家,但您可能会发现手册的一节很有启发性。

请查看JBoss社区网站。从那里:

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


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

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