它是否使用某种字节码修改原始类?
或者,也许Hibernate通过将给定对象与以前持久化的版本进行比较来获得脏状态?
我遇到了复杂对象的问题hashCode()和equals()方法.如果对象具有集合成员,并且循环引用也是一个问题,我觉得计算哈希代码会很慢.
如果Hibernate不会使用hashCode()/ equals()来检查脏状态,我想我不应该使用equals()/ hashCode()作为实体对象(而不是值对象),但我也担心如果相同的operator(==)是不够的.
所以,问题是:
Hibernate如何知道对象的属性是否发生了变化?
你建议覆盖复杂对象的hashCode()/ equals()方法吗?如果它们包含循环引用怎么办?
并且,
是hashCode()/ equals()只有这个id领域就足够了?
我对Hibernate的理解是,当对象从DB加载时,它们被添加到Session中.在不同的点上,根据您的配置,会话被刷新.此时,修改后的对象将写入数据库.
Hibernate如何确定哪些对象是"脏的"并且需要编写?
Hibernate生成的代理是否拦截了对字段的赋值,并将对象添加到Session中的脏列表中?
或者Hibernate是否查看Session中的每个对象并将其与对象的原始状态进行比较?
还是完全不同的东西?