我正在使用 JPA (Hibernate) 编写代码,并想检查日志中的 LIMIT 和 OFFSET 参数。
我添加了 Logback 并正确设置了日志级别,但我无法执行上述操作。我怎样才能做到这一点?
采用OpenJDK 11.0.4
休眠 5.4.4.Final
Logback 经典版 1.2.3
MySQL 8.0.17
<?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>
我的 Java 代码使用 JPA
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();
日志(实际)
没有显示 LIMIT 和 OFFSET 的参数。我只能看到一个 SQL。
[DEBUG][main ] org.hibernate.SQL - select foo0_.id as id1_1_, ... from Foo foo0_ order by foo0_.id limit ?, ?
附带说明一下,其他 SQL 参数已正确显示。
[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]
日志(预期)
[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]
翻阅古今
当年话下
米脂
相关分类