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

如何在Hibernate中配置 StatementInspector?

仲孙经赋
2023-03-14

https://docs . JBoss . org/hibernate/ORM/5.2/javadocs/org/hibernate/interceptor . html说onPrepareStatement(字符串sql)不推荐使用。如果希望检查和修改SQL语句,请提供StatementInspector。

但是我不清楚如何在hibernate中在应用程序级别配置StatementInspector(我不想在每个Hibernate会话级别设置它)。

共有3个答案

欧阳鸿德
2023-03-14
匿名用户

您可以在Spring中使用< code > hibernateproperties customizer

@Configuration
public class HibernateConfig {

    @Bean
    public HibernatePropertiesCustomizer configureStatementInspector() {
        return (properties) -> properties.put(AvailableSettings.STATEMENT_INSPECTOR, (StatementInspector) sql -> {
            // figure out what to return
            return sql;
        });
    }
}

梁研
2023-03-14

不要那样做)

你只需要两样东西:

    < li >向persistence.xml添加属性:

属性名称=“hibernate.session_factory.语句检查器” 值=“完全限定类名”

利润!

翁鸿远
2023-03-14

注册< code>StatementInspector的最佳方法是使用< code > hibernate . session _ factory . statement _ inspector 配置属性。

这样,无论您是使用JPA(例如Spring Data JPA)还是原生Hibernate(例如Spring with < code > hibernatetransactionmanager 和< code > LocalSessionFactoryBean )来引导Hibernate,都没有关系。

因此,您可以通过persistence.xmlJPA配置文件提供hibernate.session__inspector

<property
    name="hibernate.session_factory.statement_inspector"
    value="com.vladmihalcea.book.hpjp.hibernate.logging.inspector.SqlCommentStatementInspector"
/>

或者,如果您使用的是 Spring,您也可以以编程方式设置 hibernate.session_factory.statement_inspector

@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;
}

请注意,<code>hibernate.session_factory。statement_inspector设置可以采用表示实现StatementInspector接口的完全限定类的String

 类似资料:
  • 我试图创建一个springmvc项目配置与Hibernate使用web.xml 我的问题是,当我运行时,它不会自动创建用户表。 这是我的代码: 文件spring-config.xml 文件web.xml: 文件UserDAO: 文件UserDaoImpl: 文件用户: 这是我的日志:

  • Oracle正在转向通用连接池(UCP),用于维护可以借用、返回或关闭的池连接。我的webapplication在它自己的数据层中就有了这一点。这个应用程序将迁移到使用Hibernate的JPA。此时,我只能将Hibernate配置为使用Oracle JDBC驱动程序。

  • 我正在尝试设置一个SpringMVC Hibernate WAR,用于部署到Jboss 7.1.1Final。我的应用程序使用Hibernate 3.6.1 我遵循了在JBoss中设置Hibernate 3所需的所有步骤。 > 转到 AS 安装并切换到模块/组织文件夹。 为插槽 3 创建了用于保存Hibernate 3 的文件夹 将Hibernate 3 罐子复制到这个新的 AS/模块/组织/冬眠

  • 问题内容: 我不想在我的java源代码中进行配置,可以像这样完成: 因为我希望它是可配置的。 我不使用hibernate.properties,而仅使用persistence.xml,就像我使用JPA一样。我怎样才能使作为使用的所有实体只? 问题答案: 您正在将JPA标准与Hibernate实现一起使用。在这种情况下,您尝试配置特定于Hibernate实现的内容,而不是JPA标准的一部分。如果它是

  • 问题内容: 这是MySQL的配置文件: 为SQL Server 2005指定什么?我这样做是这样的: 我的问题更确切地说是如何指定必须连接的数据库? 在MySQL中,我曾经这样做: 问题答案: 特定于数据库的 属性是: :JDBC驱动程序类 :JDBC URL :数据库用户 :数据库密码 :Hibernate的类名,它允许Hibernate生成针对特定关系数据库优化的SQL。 要更改数据库,您必须

  • Hibernate 3. x使用slf4j进行日志记录。Hibernate 4. x使用jboss日志记录。我正在编写一个使用Hibernate 4和SLF4J进行日志记录的独立应用程序。 如何配置Hibernate以登录到SLF4J? 如果这不可能,我如何配置Hibernate的日志记录? Hibernate 4.1关于日志记录的手动部分以警告开始,它是。。。 完全过时了。Hibernate从4