【问题标题】:Record not inserted after interceptor onSave()拦截器 onSave() 后未插入记录
【发布时间】:2016-08-03 11:17:29
【问题描述】:

我的应用由带有休眠功能的 spring @transaction 组成。我正在尝试使用休眠拦截器。我将拦截器注册为

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;
}

【问题讨论】:

    标签: java spring hibernate interceptor spring-transactions


    【解决方案1】:

    Interceptor.onSave()

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

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

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

    您也可以尝试使用Interceptor.afterTransactionCompletion() 来检查记录是否被有效插入。

    在事务提交或回滚后调用。

    【讨论】:

    • 谢谢,是的,我修改了持久对象的状态,但即使事务完成,插入查询也不会被触发
    猜你喜欢
    • 1970-01-01
    • 2014-09-29
    • 2020-07-26
    • 2013-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-24
    • 1970-01-01
    相关资源
    最近更新 更多