为了显示 Hibernate 在后台生成的 SQL,您需要在配置文件中启用一个属性。
如果您使用 JPA 开发应用程序,您只需在 persistence.xml 文件中将属性 hibernate.show_sql 设置为 true。看这个例子:
<persistence version="2.1"
xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://xmlns.jcp.org/xml/ns/persistence
http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
<persistence-unit name="primary">
<jta-data-source>java:jboss/datasources/KitchensinkQuickstartDS</jta-data-source>
<properties>
<!-- Properties for Hibernate -->
<property name="hibernate.hbm2ddl.auto" value="create-drop" />
<property name="hibernate.show_sql" value="true" />
</properties>
</persistence-unit>
</persistence>
因此,在您的服务器日志中,您将看到 Hibernate 在后台执行的所有 SQL 语句:
为了查看您的语句的绑定参数,您可以激活以下记录器类别:
<logger category="org.hibernate.type.descriptor.sql">
<level name="TRACE"/>
</logger>
这是具有上述 Logger 的应用程序的输出:
2022-09-10 17:29:55,502 INFO [stdout] (default task-1) Hibernate: select member0_.id as id1_0_, member0_.email as email2_0_, member0_.name as name3_0_, member0_.phone_number as phone_nu4_0_ from MemberJSP member0_ order by member0_.name asc
2022-09-10 17:29:55,510 TRACE [org.hibernate.type.descriptor.sql.BasicExtractor] (default task-1) extracted value ([id1_0_] : [BIGINT]) - [0]
2022-09-10 17:29:55,513 TRACE [org.hibernate.type.descriptor.sql.BasicExtractor] (default task-1) extracted value ([email2_0_] : [VARCHAR]) - [john.smith@mailinator.jsp.com]
2022-09-10 17:29:55,514 TRACE [org.hibernate.type.descriptor.sql.BasicExtractor] (default task-1) extracted value ([name3_0_] : [VARCHAR]) - [John Smith]
2022-09-10 17:29:55,514 TRACE [org.hibernate.type.descriptor.sql.BasicExtractor] (default task-1) extracted value ([phone_nu4_0_] : [VARCHAR]) - [2125551212]
最后,要在数据源级别配置 SQL 语句的绑定,请查看这篇文章:如何使用 JBoss 和 WildFly 跟踪 JDBC 语句
实际上,您可以在控制台上看到的输出可能非常混乱。您可以通过添加以下属性来打开 SQL 格式化:
<property name="hibernate.format_sql" value="true" />
结果,您将在日志中看到格式良好的输出:
17:37:03,994 INFO [stdout] Hibernate:
17:37:03,994 INFO [stdout]
17:37:03,994 INFO [stdout] drop table Member if exists
17:37:03,994 INFO [stdout] Hibernate:
17:37:03,994 INFO [stdout]
17:37:03,994 INFO [stdout] drop sequence if exists hibernate_sequence
17:37:03,995 INFO [stdout] Hibernate: create sequence hibernate_sequence start with 1 increment by 1
17:37:03,995 INFO [stdout] Hibernate:
17:37:03,995 INFO [stdout]
17:37:03,995 INFO [stdout] create table Member (
17:37:03,995 INFO [stdout] id bigint not null,
17:37:03,995 INFO [stdout] email varchar(255) not null,
17:37:03,995 INFO [stdout] name varchar(25) not null,
17:37:03,995 INFO [stdout] phone_number varchar(12) not null,
17:37:03,995 INFO [stdout] primary key (id)
17:37:03,995 INFO [stdout] )
另一方面,如果您正在使用本机 Hibernate 开发应用程序,则需要在您的 hibernate.cfg.xml 文件中放置以下属性:
<hibernate-configuration>
<session-factory>
<!-- connection settings -->
<property name="show_sql">true</property>
<property name="format_sql">true</property>
</session-factory>
</hibernate-configuration>
对于 JPA 示例,属性 show_sql 当设置为 true 时将打印 SQL 语句。属性 format_sql 当设置为 true 时将格式化 SQL 语句。
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : http://www.mastertheboss.com/hibernate-jpa/query/how-to-see-the-sql-generated-by-hibernate/
内容来源于网络,如有侵权,请联系作者删除!