我们正在将Java应用程序的持久层从JDBC模板重构为JPA/Hibernate。

我正在分析要发布到数据库的SQL语句,并且看到“SHOW WARNINGS”已经发布了很多很多次。根据JProfiler,“显示警告”占了相当大的“固有时间”。

是什么原因导致SHOW WARNINGS如此频繁地发出?

使用Jdbc模板时,以前没有发出此显示警告。

以下是我们栈中与持久性相关的部分。唯一的变化是引入了JPA/Hibernate。

  • JPA/hibernate :4.3.6
  • MySQL驱动程序:5.1.33
  • MySQL数据库:5.6.20
  • JDBC连接池:HikariCP-2.3.2

  • 编辑:这是发出SHOW WARNINGS时的示例堆栈跟踪。
    com.mysql.jdbc.StatementImpl.getWarnings()
    com.zaxxer.hikari.proxy.PreparedStatementJavassistProxy.getWarnings()
    org.hibernate.jpa.internal.QueryImpl.getSingleResult()
    com.mysema.query.jpa.impl.AbstractJPAQuery.getSingleResult(javax.persistence.Query)
    com.mysema.query.jpa.impl.AbstractJPAQuery.uniqueResult()
    com.mysema.query.jpa.impl.AbstractJPAQuery.uniqueResult(com.mysema.query.types.Expression)
    org.springframework.aop.framework.JdkDynamicAopProxy.invoke(java.lang.Object, java.lang.reflect.Method, java.lang.Object[ ])
    com.sun.proxy.$Proxy115.findOne(com.mysema.query.types.Predicate)
    

    最佳答案

    这是为什么会发出显示警告:org.hibernate.engine.jdbc.spi.SqlExceptionHelper.handleAndClearWarnings()正在调用com.mysql.jdbc.StatementImpl.getWarnings()

    Hibernate源代码中的注释说:



    我将“org.hibernate”上的logback.xml的日志记录级别提高到ERROR。分析显示SHOW WARNINGS查询不再发出。

    这在性能上做了些微的改进。

    对于在这里禁用SHOW WARNINGS是否真的是一个好主意,我将不胜感激。

    关于mysql - 为什么在这里发出 'SHOW WARNINGS'查询? (JPA/hibernate/MySQL),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30926597/

    10-12 20:51