我的型号:

 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中有一个 Father 对象有一个 Son 关联对象(bidir)。
  2. 从数据库父加载。
  3. 更新父亲的姓名字段。
  4. 更新儿子的姓名字段。
  5. 坚持父亲。

我的拦截器首先检测父亲更新(onFlushDirty)。然后为儿子执行onFlushDirty。在本例中,我更新 son.lastModifyDate 还有father.lastSonModifyDate.

当执行结束时, 除father.lastSonModifyDate 外,所有更新均保留. 。我认为这是因为父亲正在会话中并且已在儿子之前更新,因此该实体会覆盖儿子实体的 onFlushDirty 方法中所做的更改。

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

谢谢。

有帮助吗?

解决方案

你不能。onFlushDirty() 为集合元素调用 它已被所有者调用 更新操作(如果有)已安排。

是否有任何原因导致您不能在 DAO 中执行上述所有操作而不是依赖拦截器?或者在数据库级别(映射两者 lastModifyDate 生成的属性)?

其他提示

您需要为具有级联选项的实体重写 onCollectionUpdate 。这是在安排之前调用的。

干杯~

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top