1

我的模型:

 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
 }

用例:

  1. 在 DB 中有一个FatherSon对象关联的对象(bidir)。
  2. 从数据库父亲加载。
  3. 更新父亲的姓名字段。
  4. 更新儿子的姓名字段。
  5. 坚持父亲。

我的拦截器首先检测到父亲更新(onFlushDirty)。然后为儿子执行 onFlushDirty。在这种情况下,我更新了 son.lastModifyDate和 Father.lastSonModifyDate

执行结束时,所有更新都将保留,但 Father.lastSonModifyDate 除外。我认为这是因为父亲在会话中并且在儿子之前已经更新,所以这个实体覆盖了 onFlushDirty 方法中对儿子实体所做的更改。

我怎样才能达到我的目标(从儿子拦截器中设置父亲的 lastSonModifyDate)?

谢谢。

4

2 回答 2

0

你不能。在为所有者调用 onFlushDirty()之后,为集合元素调用 onFlushDirty()并且已经安排了更新操作(如果有)。

有什么理由不能在 DAO 中完成上述所有操作,而不是依赖拦截器?还是在数据库级别(映射lastModifyDate生成的两个属性)?

于 2009-10-16T17:15:26.940 回答
0

您需要为具有级联选项的实体覆盖 onCollectionUpdate。这是在计划之前调用的。

干杯~

于 2012-02-17T07:52:42.957 回答