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

Jer*_*iho 9 java hibernate equals hashcode

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

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

Mat*_*ell 9

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

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

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