题
我的型号:
public class Father {
Set<Son> sons = new HashSet<Son>();
String name = null;
Date lastSonModifyDate = null;
// ... other fields and setters/getters
}
public class Son {
Father father = null;
String name = null;
Date lastModifyDate = null;
// ... other fields and setters/getters
}
使用案例:
- DB中有一个
Father
对象有一个Son
关联对象(bidir)。 - 从数据库父加载。
- 更新父亲的姓名字段。
- 更新儿子的姓名字段。
- 坚持父亲。
我的拦截器首先检测父亲更新(onFlushDirty)。然后为儿子执行onFlushDirty。在本例中,我更新 son.lastModifyDate 还有father.lastSonModifyDate.
当执行结束时, 除father.lastSonModifyDate 外,所有更新均保留. 。我认为这是因为父亲正在会话中并且已在儿子之前更新,因此该实体会覆盖儿子实体的 onFlushDirty 方法中所做的更改。
我怎样才能达到我的目标(从儿子拦截器设置父亲的lastSonModifyDate)?
谢谢。
解决方案
你不能。onFlushDirty() 为集合元素调用 后 它已被所有者调用 和 更新操作(如果有)已安排。
是否有任何原因导致您不能在 DAO 中执行上述所有操作而不是依赖拦截器?或者在数据库级别(映射两者 lastModifyDate
生成的属性)?
其他提示
您需要为具有级联选项的实体重写 onCollectionUpdate 。这是在安排之前调用的。
干杯~
不隶属于 StackOverflow