当前位置: 首页 > 知识库问答 >
问题:

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

扶文光
2023-03-14

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

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

对象和属性都是实体。

共有2个答案

冉俊德
2023-03-14

问题是即使在拦截器运行之前,实体也被保存到数据库中。这是因为它是一个实体,需要先保存,然后Hibernate才能在另一个实体中引用它。

申黎明
2023-03-14

我很确定在这种情况下不会调用拦截器。。。

请在保存数据时尝试此操作。。。

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

并公布调查结果。这将强制hibernate调用onFlushDirty

同时将@Override注释置于onFlushDirty之上,以确保它被正确覆盖。

 类似资料:
  • 问题内容: 我尝试了一些来自hibernate 4.0拦截器的 代码,该代码为使用会话级拦截器提供了以下代码: 但是,我同时检查了hibernate-core 4.0源代码和onliehibernate 4.0 java- doc ,该类没有方法,但是hibernate 3.6 java- doc确实具有此方法。 有人知道该方法移到哪里吗?如果已弃用,为什么文档仍将其保留在教程文档中?在4.0中如

  • 我使用springboot(2.1.9。RELEASE)和hibernate(5.4.6。最终)来开发程序,我需要懒加载一个字符串类型字段(更改日志),所以我使用了持久性属性截取表,字符串类型字段可以懒加载,但是ManyTo很多的连接表不起作用。这是代码 测试用例代码 运行测试用例后,数据被插入到类别和项目表中,但是joinTablecategory_items没有数据。如果项目不使用持久性属性属

  • 我们正在构建一个应用程序,我们需要将实体更新登录到历史表中。我试图通过Hibernate拦截器来实现这一点,我们可以设法获得所有的更改,但很难将它们插入审计表。 我的JPA配置 我的拦截器 } 在方法afterTransactionCompletion中,我需要将所有审计实体写入DB,Autowire不工作,因为这不是spring管理的bean,是否有任何方法可以在此方法中获取DB会话,以便我可以

  • easyopen在1.3.1版本开始支持拦截器。 easyopen拦截器实现原理跟springmvc拦截器类似,拦截器作用在api方法上,即有@Api注解的方法。 拦截器定义如下: /** * 拦截器,原理同springmvc拦截器 * @author tanghc * */ public interface ApiInterceptor { /** * 预处理回调方法,

  • 你可以配置处理器拦截器HandlerInterceptors或web请求拦截器WebRequestInterceptors等拦截器,并配置它们拦截所有进入容器的请求,或限定到符合特定模式的URL路径。 在MVC Java编程配置下注册拦截器的方法: @Configuration @EnableWebMvc public class WebConfig extends WebMvcConfigure

  • Uragano里可以自定义拦截器,并且拦截器分服务器端拦截器和客户端拦截器 拦截器还分全局拦截器和局部拦截器,并且拦截器也是支持依赖注入的 创建拦截器 public class ClientGlobalInterceptor : InterceptorAbstract { private ILogger Logger { get; } public