拦截器onSave()后未插入记录

时间:2016-08-03 11:17:29

标签: java spring hibernate interceptor spring-transactions

我的应用程序包含spring @transaction和hibernate。我正在尝试使用hibernate拦截器。我将拦截器注册为

getHibernateTemplate().getSessionFactory().withOptions().interceptor(interceptor).openSession();

实际的拦截器扩展了EmptyInterceptor,我重写了onSave()方法。

问题是调用了拦截器onSave()方法,但之后,实际实体不会插入到数据库中。

public boolean onSave(Object entity, Serializable id, Object[] state,
        String[] propertyNames, Type[] types) {
    System.out.println("inside interceptor - on save");
    {
        // my changes here . setting a field of the entity.

        return true;
    }
    return false;
}

1 个答案:

答案 0 :(得分:0)

根据Interceptor.onSave()

  

在之前调用保存对象。拦截器可以修改状态,该状态将用于SQL INSERT并传播到持久对象。

因此,更改将提交给持久对象和Hibernate将向数据库发出的INSERT语句。

如果您使用与打开事务的会话不同的会话查询数据库,则可能需要确保在@Transactional方法完成后搜索记录。那时Spring将把事务提交到数据库。

您还可以尝试使用Interceptor.afterTransactionCompletion()检查记录是否已插入效果。

  

提交或回滚事务后调用。