繁体   English   中英

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

[英]How hibernate uses equals() and hashCode()?

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM