0

我实现了一个 Hibernate 拦截器(扩展 EmptyInterceptor)并实现了onFlushDirty方法,以便在保存该对象时将对象的属性设置为 null。代码如下所示:

public boolean onFlushDirty(...) {
// looking for the property index
int i = 0;
for (i=0; i<propertyNames.length; i++) {
  if ("someProperty".equals(propertyNames[i])) {
    break;
  }
}

// setting it to null
currentState[i] = null;

不幸的是,即使我取消了对象,记录仍然保存到数据库中。奇怪的是,当我修改该对象时,更改将保存到数据库中。

对象和属性都是实体。

4

2 回答 2

0

我很确定在这种情况下没有调用拦截器......

您能否在保留数据时尝试此操作...

session.evict(entity);
session.update(entity);

并发布调查结果。这将强制休眠调用onFlushDirty.

还要放置@Override注释onFlushDirty以确保它被正确覆盖。

于 2012-08-17T17:42:34.120 回答
0

问题在于即使在拦截器运行之前实体也已保存到数据库中。这是因为它是一个实体,需要在 hibernate 可以在另一个实体中引用它之前保存。

于 2012-10-01T20:25:32.530 回答