我的模特:
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
}
用例:
Father
对象与Son
对象关联(bidir)。我的拦截器首先检测父更新(onFlushDirty)。然后为儿子执行onFlushDirty。在这种情况下,我更新了son.lastModifyDate 以及father.lastSonModifyDate 。
执行结束时,除father.lastSonModifyDate 外,所有更新都会保留。我认为这是因为父在会话中并且在儿子之前已经更新,所以这个实体会覆盖对子实体的onFlushDirty方法所做的更改。
我怎样才能达到我的标记(从儿子拦截器设置父亲的lastSonModifyDate)?
感谢。
答案 0 :(得分:0)
你做不到。对于集合元素之后调用onFlushDirty()已为所有者调用它,并且更新操作(如果有)已经被调度。
你有没有理由不能在你的DAO中完成上述所有操作而不是依靠拦截器?或者在数据库级别(映射生成的lastModifyDate
属性)?
答案 1 :(得分:0)
您需要为具有级联选项的实体覆盖onCollectionUpdate。这是在安排之前调用的。
欢呼声〜