最佳答案
它是否对原始类使用了某种字节码修改?
或者,也许 Hibernate 通过比较给定对象和以前持久化的版本来获得脏状态?
对于复杂的对象,我遇到了 hashCode()
和 equals()
方法的问题。如果对象具有集合成员,并且循环引用也是一个问题,那么我认为计算哈希代码会非常慢。
如果 Hibernate 不使用 hashCode()
/equals()
来检查脏状态,我想我不应该使用 equals()
/hashCode()
来检查实体对象(不是值对象) ,但是我也担心同样的操作符(==
)是不够的。
所以,问题是:
Hibernate 如何知道对象的属性是否已更改?
是否建议重写复杂对象的 hashCode()
/equals()
方法? 如果它们包含循环引用怎么办?
还有,
只有 id
字段的 hashCode()
/equals()
是否足够?