https://docs.jboss.org/hibernate/orm/5.2/javadocs/org/hibernate/Interceptor.html 说 onPrepareStatement(String sql) 已弃用。如果您希望检查和更改 SQL 语句,请改为提供 StatementInspector。
但我不清楚如何在应用程序级别的 Hibernate 中配置 StatementInspector(我不想在每个 Hibernate session 级别都设置它)。
最佳答案
注册 StatementInspector
的最佳方式是使用 hibernate.session_factory.statement_inspector
配置属性。
这样,无论您是使用 JPA(例如 Spring Data JPA)还是 native Hibernate(例如带有 HibernateTranscationManager
和 LocalSessionFactoryBean
的 Spring)引导 Hibernate 都没有关系。
因此,您可以提供 hibernate.session_factory.statement_inspector
通过 persistence.xml
JPA配置文件:
<property
name="hibernate.session_factory.statement_inspector"
value="com.vladmihalcea.book.hpjp.hibernate.logging.inspector.SqlCommentStatementInspector"
/>
或者,您也可以设置 hibernate.session_factory.statement_inspector
如果您使用的是 Spring,则以编程方式:
@Bean
public LocalSessionFactoryBean sessionFactory() {
LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
sessionFactory.setDataSource(dataSource());
sessionFactory.setPackagesToScan({
"com.vladmihalcea.books.high.performance.java.persistence"
});
sessionFactory.setHibernateProperties(hibernateProperties());
return sessionFactory;
}
@Bean
public PlatformTransactionManager hibernateTransactionManager() {
HibernateTransactionManager transactionManager
= new HibernateTransactionManager();
transactionManager.setSessionFactory(sessionFactory().getObject());
return transactionManager;
}
private final Properties hibernateProperties() {
Properties hibernateProperties = new Properties();
hibernateProperties.setProperty(
"hibernate.session_factory.statement_inspector",
SqlCommentStatementInspector.class
);
hibernateProperties.setProperty(
"hibernate.dialect",
"org.hibernate.dialect.H2Dialect"
);
return hibernateProperties;
}
请注意 hibernate.session_factory.statement_inspector
设置可以采用 String
代表他完全合格的类(class)实现 StatementInspector
界面,一个Class<? extends StatementInspector>
或 StatementInspector
对象引用。
关于java - 如何在 Hibernate 中配置 StatementInspector?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39112308/