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

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

路和悌
2023-03-14

我的应用程序由spring@transaction和hibernate组成。我正在尝试使用hibernate拦截器。我把拦截器注册为

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

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

问题是调用了interceptor 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个答案

乐正宏深
2023-03-14

根据拦截器。onSave():

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

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

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

您也可以尝试使用拦截器。PostTransactionCompletion()检查记录是否有效插入。

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

 类似资料:
  • 我正在使用Hibernate为一个小项目实现createDate和lastUpdate时间戳。我使用一个EmptyInterceptor,并根据我在这里找到的建议解决方案重载提供的方法。除非有一点细节,否则这个解决方案很好用。我想添加一列,指示对象是否已经更新。我知道我可以通过简单地比较两个创建和更新的时间戳是否有差异来实现这一点,但是我需要有这个字段来指示有一个更新。 我使用onSave方法,在

  • 问题内容: 我正在使用Java EE 6和Jboss AS7.1,并尝试使用拦截器绑定(来自jboss网站的示例)。 我有一个InterceptorBinding注解: 拦截器: 还有一个豆: 但是拦截器没有被称为。。。 在编写此代码时将调用拦截器: 谢谢你的帮助。 问题答案: 您是否按照参考示例中的说明启用了拦截器? 缺省情况下,bean档案没有通过拦截器绑定绑定的已启用拦截器。必须通过将侦听器

  • 假设我有两个类Foo和Bar。Foo有一个多对一的关联到Bar,映射如下: 我已经创建了一个自定义拦截器,该拦截器从EmptyInterceptor扩展并覆盖onSave方法,如下所示: 问题在于,尽管对bar执行SQL insert语句,但对实体对象执行SQL update语句,实体对象是一个Foo,在插入之前已被修改。这将导致以下Hibernate异常。 最后一个原因:批量更新从更新[0]返回

  • 问题内容: 我创建了一个RestEASY拦截器,以允许我在Web服务调用完成后在HTTP响应上设置标头值。我的代码看起来像这样… 但是,当我调用服务时,永远不会调用拦截器。我看到webservice调用成功完成,但是拦截器中的任何代码都没有执行过。除了注册拦截器,我还需要做些其他事情吗?是否必须在其他任何地方声明?是否需要包含任何特殊的web.xml参数? 问题答案: 您必须在web.xml的re

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

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