https://docs.jboss.org/hibernate/orm/5.2/javadocs/org/hibernate/Interceptor.html表示onPrepareStatement(String sql)已弃用。如果您希望检查和更改SQL语句,请提供StatementInspector。
但我不清楚如何在应用程序级别上配置Hibernate中的StatementInspector(我不想在每个Hibernate会话级别上设置它)。
https://docs.jboss.org/hibernate/orm/5.2/javadocs/org/hibernate/Interceptor.html表示onPrepareStatement(String sql)已弃用。如果您希望检查和更改SQL语句,请提供StatementInspector。
但我不清楚如何在应用程序级别上配置Hibernate中的StatementInspector(我不想在每个Hibernate会话级别上设置它)。
5条答案
按热度按时间zour9fqk1#
注册
StatementInspector
的最佳方法是使用hibernate.session_factory.statement_inspector
配置属性。这样,无论您是否使用JPA引导Hibernate(例如,Spring Data JPA)或原生Hibernate(例如Spring
HibernateTranscationManager
和LocalSessionFactoryBean
)。因此,您可以通过
persistence.xml
JPA配置文件提供hibernate.session_factory.statement_inspector
:或者,如果你使用Spring,你也可以编程地设置
hibernate.session_factory.statement_inspector
:请注意,
hibernate.session_factory.statement_inspector
设置可以采用String
(表示实现StatementInspector
接口的完全限定类)、Class<? extends StatementInspector>
或StatementInspector
对象引用。s5a0g9ez2#
不要这样做)
你只需要两样东西:
1.将属性添加到persistence.xml:
属性名=“hibernate.session_factory.statement_inspector”值=“全限定类名”
1.通过实现接口org. hibernate. resource. jdbc. spi. StatementInspector编写侦听器类。
利润!
snvhrwxg3#
可以在Spring中使用
HibernatePropertiesCustomizer
jtw3ybtb4#
为了让这个工作,你必须引导Hibernate。要执行此操作,请执行以下操作:
在你的主类中,找到你的BidgetyManagerFactory示例。它可能看起来像这样:
先别排队。在其上增加以下内容:
为
persistence.xml
中的每个属性添加servReg.applySetting()
。然后,在它下面添加这个:为应用程序中的每个带JPA注解的pojo添加
sources.addAnnotatedClass()
。快好了。现在创建一个实现StatementInspector
的类,如下所示:最后,回到你的主应用程序类,在你注册pojo的静态块下面,添加以下内容:
现在您可以返回到
persistence.xml
并删除那里的属性声明。如果还没有,请删除public static final EntityManager
声明(已将其替换为SessionFactory)。编辑:您实际上可以删除
persistence.xml
,您的应用程序仍然可以正常工作。都准备好了
slsn1g295#
事情没有太大的变化-基本上有些东西被重命名,所以从旧的“拦截器”代码的例子,你可以在网上找到,你只需要适应这些名称的变化。如果你手动构建SessionFactory(就像我一样),你可以这样做:
然后,在设置SessionFactory时,插入它的方式与之前插入Interceptor的方式非常相似
参见6.1中的setInterceptor与6.2中的setStatementInspector的比较