I'm writing a code using JPA (Hibernate) and would like to check LIMIT and OFFSET parameters in the log. I added Logback and set log levels properly, but I can't do above.
h1. logback.xml
{code: java xml }<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration> <configuration> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>[%-5level][%-10thread] %logger{36} - %msg%n</pattern> </encoder> </appender>
<root level="INFO"> <appender-ref ref="STDOUT"/> </root>
<!-- Print SQL to log--> <logger name="org.hibernate.SQL" level="DEBUG" /> <logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="TRACE" /> </configuration>{code}
h1. My JPA code
{code:java}EntityManagerFactory emf = Persistence.createEntityManagerFactory("FooPU"); EntityManager em = emf.createEntityManager(); String jpql = "SELECT f FROM Foo f ORDER BY f.id";
// Specify LIMIT and OFFSET List<Foo> fooList = = em.createQuery(jpql, Foo.class) .setFirstResult(1) .setMaxResults(3) .getResultList();
for (Foo f : fooList) { System.out.println(f); } em.close(); emf.close();{code}
h1. Logs (Actual)
No parameters of LIMIT and OFFSET are shown. I can see just an SQL.
{code:java}[DEBUG][main ] org.hibernate.SQL - select foo0_.id as id1_1_, ... from Foo foo0_ order by foo0_.id limit ?, ?{code}
On a side note, other SQL parameters are shown properly.
{code:java}[DEBUG][main ] org.hibernate.SQL - select foo0_.id as id1_0_0_, ... from Foo foo0_ where foo0_.id=? [TRACE][main ] o.h.type.descriptor.sql.BasicBinder - binding parameter [1] as [INTEGER] - [10]{code}
h1. Logs (Expected)
{code:java}[DEBUG][main ] org.hibernate.SQL - select foo0_.id as id1_1_, ... from Foo foo0_ order by foo0_.id limit ?, ? [TRACE][main ] o.h.type.descriptor.sql.BasicBinder - binding parameter [1] as [INTEGER] - [1] [TRACE][main ] o.h.type.descriptor.sql.BasicBinder - binding parameter [2] as [INTEGER] - [3]{code}
h1. Suggestion
If we use when binding LIMIT and OFFSET parameters, we can achieve above. |
|