Hibernate拦截器 - 将属性设置为null

时间:2012-08-17 14:41:54

标签: hibernate interceptor

我实现了一个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;

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

对象和属性都是实体。

2 个答案:

答案 0 :(得分:0)

我很确定在这种情况下不会调用Interceptor ......

你可以在保留数据的同时试试这个......

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

并发布调查结果。这将force休眠以调用onFlushDirty

同时将@Override注释放在onFlushDirty上,以确保它被正确覆盖。

答案 1 :(得分:0)

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