繁体   English   中英

使用Play Framework 2时显示JPA的SQL语句

[英]Show JPA's SQL-Statements when using Play Framework 2

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

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

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

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

为了以舒适的方式检查陈述,我该怎么办?

编辑:

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

首先尝试使用配置

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

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

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

我正在使用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"/>

不幸的是,在Hibernate中不知道如何做到这一点,无论如何在Ebean中,可以直接在代码中打开和关闭日志,即:

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

要么

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

另一方面,如果Hibernate打印了大量的调试消息,它可能表明您应该考虑优化查询,即如果您获得具有延迟加载关系的100条记录的列表 - ORM需要对丢失的数据执行其他查询,而是一个查询与join(s)它执行n *关系,因此它可以是真正的performance killer

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM