Hibernate show real SQL
log4j.properties
log4j.logger.org.hibernate=INFO, hb
log4j.logger.org.hibernate.SQL=DEBUG
log4j.logger.org.hibernate.type=TRACE
log4j.logger.org.hibernate.hql.ast.AST=info
log4j.logger.org.hibernate.tool.hbm2ddl=warn
log4j.logger.org.hibernate.hql=debug
log4j.logger.org.hibernate.cache=info
log4j.logger.org.hibernate.jdbc=debug
log4j.appender.hb=org.apache.log4j.ConsoleAppender
log4j.appender.hb.layout=org.apache.log4j.PatternLayout
log4j.appender.hb.layout.ConversionPattern=HibernateLog --> %d{HH:mm:ss} %-5p %c - %m%n
log4j.appender.hb.Threshold=TRACE
hibernate.cfg.xml
<property name="show_sql">true</property>
<property name="format_sql">true</property>
<property name="use_sql_comments">true</property>
persistence.xml
Some frameworks use persistence.xml
:
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.format_sql" value="true"/>
<property name="hibernate.use_sql_comments" value="true"/>
How to print a query string with parameter values when using Hibernate
You need to enable logging for the the following categories:
org.hibernate.SQL
- set todebug
to log all SQL DML statements as they are executedorg.hibernate.type
- set totrace
to log all JDBC parameters
So a log4j configuration could look like:
# logs the SQL statements
log4j.logger.org.hibernate.SQL=debug
# Logs the JDBC parameters passed to a query
log4j.logger.org.hibernate.type=trace
The first is equivalent to hibernate.show_sql=true
legacy property, the second prints the bound parameters among other things.
Another solution (non hibernate based) would be to use a JDBC proxy driver like P6Spy.
How can I log SQL statements in Spring Boot?
Try using this in your properties file:
logging.level.org.hibernate.SQL=DEBUG
logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE
Hibernate-4 show SQL code that is generated
Adding SLF4J
dependency in pom.xml
has fixed my issue:
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.6.6</version>
</dependency>
Display Hibernate SQL To Console (Spring)
show_sql not a property of org.apache.commons.dbcp.BasicDataSource . You have to define it in session factory configuration.
like this
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="packagesToScan" value="data" />
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.H2Dialect</prop>
<prop key="hibernate.current_session_context_class">thread</prop>
<prop key="hibernate.transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
</props>
</property>
</bean>
Logback logger to show Hibernate SQL has to be in caps
SQL has to be in uppercase, because the logger name is case-sensitive. See this answer.
IntelliJ can't link to the class, because it's not actually a class, just the name of the Hibernate logger. By convention, logger names are the class name, but that's not a requirement, they can be any string.
Related Topics
Adding External Library to Artifact Jar in Intellij Idea
Best Implementation For Hashcode Method For a Collection
Get Generic Type of Java.Util.List
When Does Static Class Initialization Happen
Persistentobjectexception: Detached Entity Passed to Persist Thrown by JPA and Hibernate
Is It Safe to Use a Static Java.Sql.Connection Instance in a Multithreaded System
Does Java Support Default Parameter Values
How to Set the Java.Library.Path from Eclipse
How Many Threads Can a Java Vm Support
Restricting Jtextfield Input to Integers
Implementing Back/Forward Buttons in Swing
List of Java Class File Format Major Version Numbers
What's a Good Java, Curses-Like, Library For Terminal Applications
Replace a Character At a Specific Index in a String
How to Make Pipes Work With Runtime.Exec()
Convert Arraylist≪String≫ to String[] Array
What's the Best Way to Build a String of Delimited Items in Java