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

问题描述 投票:0回答:2

我的应用程序由 spring @transaction 和 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;
}
java spring hibernate interceptor spring-transactions
2个回答
0
投票

根据Interceptor.onSave()

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

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

INSERT

 语句。 

如果您使用与打开事务的会话不同的会话查询数据库,您可能需要确保在

@Transactional

 方法完成后正在搜索记录。此时 Spring 会将事务提交到数据库。

您也可以尝试使用

Interceptor.afterTransactionCompletion() 来检查记录是否有效插入。

事务提交或回滚后调用。


0
投票
您需要在上面方法的末尾调用 super.onSave() 。您的重写允许您对对象进行更改、添加日志记录等,但它需要基本方法来实际执行 SQL 操作。

© www.soinside.com 2019 - 2024. All rights reserved.