Hibernate 6 拦截器与 Spring Boot 3

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

我正在将应用程序从 Spring Boot 2.7 和 Hibernate 5.6 升级到 Spring Boot 3.0 和 Hibernate 6.2。

应用程序具有实现

org.hibernate.Interceptor
的拦截器,使用
application.yml
和属性
spring.jpa.properties.hibernate.ejb.interceptor
注册,如下所示:

spring:
  jpa:
    properties:
      hibernate:
        ejb:
          interceptor: org.company.MyInterceptor

问题很简单,执行升级后拦截器停止工作。我还没有在 Hibernate 或 Spring Boot 变更日志或迁移指南中读到这方面的任何更改,所以我想知道为什么这不再起作用。

我还阅读了 Hibernate 官方文档和 Baeldung 上有关拦截器的文章,建议执行以下操作:

SessionFactory sessionFactory = getSessionFactoryBuilder(serviceRegistry)
  .applyInterceptor(new CustomInterceptor())
  .build();

但是由于一切都是 Spring 管理的,并且我们不直接使用任何这样的代码,我不知道如何将其应用于 Spring 应用程序

java spring spring-boot hibernate interceptor
2个回答
2
投票

只是为了将此问题标记为已回答,正如 Andy Wilkinson 在评论中所说,解决方案是使用此属性:

hibernate.session_factory.interceptor

0
投票

就我而言,我使用的是旧方法

onPrepareStatement
,我需要提供一个
org.hibernate.resource.jdbc.spi.StatementInspector
,使用
hibernate.session_factory.statement_inspector

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