【问题标题】:Show JPA's SQL-Statements when using Play Framework 2使用 Play Framework 2 时显示 JPA 的 SQL 语句
【发布时间】:2014-04-02 13:36:07
【问题描述】:

我正在使用 Play Framework 和 JPA/Hibernate 开发一个 Web 应用程序。出于调试目的,很高兴看到 JPA 使用的 SQL 语句。已经有另一个 thread 有同样的问题,但它是关于 Play 1 并且给定的解决方案对我不起作用 - 似乎 jpa.debugSQL=true 不能在 Play 2 中使用(没有命名为 EntityManager 的持久性提供程序真的)。

相反,我在 Play 的 application.conf 中添加了以下内容:

db.default.logStatements=true
logger.org.hibernate=DEBUG

我不确定我是否需要这两行,但至少现在记录了 SQL 语句。 但是对于大型查询,Hibernate 会打印出大量调试消息,这会使已经打印的 SQL 语句在我的控制台窗口中消失。我已经尝试增加控制台窗口的缓冲区,但这并没有太大变化。

我必须做什么才能以舒适的方式检查语句?

编辑:

logger.org.hibernate 设置为INFO 时,我根本没有收到任何语句(即使使用db.default.logStatements=true)。

【问题讨论】:

    标签: java sql hibernate jpa playframework-2.0


    【解决方案1】:

    先试试配置

    db.default.logStatements=true
    logger.org.hibernate=DEBUG
    

    找出记录语句的类(例如 org.hibernate.xxx.StatementLogger)。 将 org.hibernate 改回 INFO 并为语句记录器包添加一个新行:

    logger.org.hibernate=INFO
    logger.org.hibernate.xxx=DEBUG
    

    【讨论】:

    • 完美,谢谢。最后是logger.org.hibernate=INFO + logger.org.hibernate.SQL=DEBUG
    【解决方案2】:

    我将 Hibernate 与 HikariCp 一起使用,以上建议的更改对我不起作用。相反,我使用 hibernate 属性来转储 sql,它工作正常。

    在您的 persistence.xml 文件的属性部分添加以下行。

    <property name="hibernate.show_sql" value="true"/>
    <property name="hibernate.format_sql" value="true"/>
    <property name="hibernate.use_sql_comments" value="true"/>
    

    【讨论】:

      【解决方案3】:

      不幸的是不知道在 Hibernate 中执行此操作的方法,无论如何在 Ebean 中可以直接在代码中打开和关闭日志记录,即通过:

      Ebean.getServer(null).getAdminLogging().setDebugGeneratedSql(true);
      

      Ebean.getServer(null).getAdminLogging().setDebugGeneratedSql(false);
      

      另一方面,如果 Hibernate 打印出 大量调试消息,这可能表明您应该考虑优化查询,即,如果您获得 100 条记录的列表延迟加载的关系 - ORM 需要为丢失的数据执行额外的查询,而不是一个带有连接的查询,它执行n * 关系,所以它可以是真实的performance killer

      【讨论】:

      • 谢谢。它已经是具有单个结果实体的单个查询,但是为了急切地加载一些一对多关系,正在进行一些 fetch 连接。
      • 是的,我说的是这个eagerly load,尝试优化 ypur 查询,或者手动执行第二次查询和连接数据,否则当你去生产时,即对于 Heroku,您可能会大吃一惊(这些词的含义不好)
      猜你喜欢
      • 1970-01-01
      • 2011-06-08
      • 1970-01-01
      • 1970-01-01
      • 2015-08-29
      • 1970-01-01
      • 2014-01-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多