|
|
1
22
Hibernate使用/可以使用字节码生成(cglib),这样当您调用setter(甚至分配给字段afait)时,它就知道字段是脏的。
这会立即将该字段/对象标记为脏的,但不会减少在刷新期间需要进行脏检查的对象的数量。它所做的只是影响
我是基于最近对源代码(3.2.6ga)的搜索而得出的上述结论,不管它增加了什么可信度。关注点包括:
|
|
|
2
5
Hibernate获取加载到会话中的每个对象的状态快照。在刷新时,将会话中的每个对象与其对应的快照进行比较,以确定哪些对象是脏的。根据需要发出SQL语句,并更新快照以反映(现在已清除)会话对象的状态。 |
|
|
3
1
查看org.hibernate.event.def.defaultflushentityeventlistener.dirtycheck 会话中的每个元素都会转到该方法,通过与未接触的版本(一个来自缓存或一个来自数据库)进行比较来确定它是否脏。 |
|
4
1
|
|
|
5
0
这些答案是不完整的(充其量——我不是这里的专家)。如果您的会话中有一个hib-man实体,您对它什么都不做,您仍然可以在调用save()时得到一个更新。什么时候?当另一个会话在Load()和Save()之间更新该对象时。下面是我的例子: hibernate sets dirty flag (and issues update) even though client did not change value |