代码:
int id = 1;
queryFactory.from(qtable_xxx).where(qtable_xxx.id.eq(id)).fetch()
例如,下面是我控制台的日志:
Hibernate: select count(longjob0_.id) as col_0_0_ from long_job longjob0_ where (longjob0_.status in (? , ?)) and longjob0_.type=?
我怎么可以得到类似这样的日志呢?
Hibernate: select * from table_xxx where id = 32
ROOT
2
你是想在日志中输出占位符参数的话可以配置 logger :
<logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="TRACE"/>
如果你使用 Hibernat 6 (Spring Boot3),那么需要改成:
<logger name="org.hibernate.orm.jdbc.bind" level="TRACE" />
我想输出不带占位符,直接渲染参数的SQL,可以直接复制后运行的SQL
或者有没有方法可以直接获取到原生的SQL,比如类似getRawSql这样的方法,不真正执行SQL,只是返回组装好的不带占位符的SQL语句
String sql = queryFactory.from(qtable_xxx).where(qtable_xxx.id.eq(id)).getRawSql()
ROOT
5
据我所知,没有。SQL是预编译,本身字符串就是带 “?” 占位符。你只有自己手动去替换参数再去执行。
我也找过,但没有找到。你可以使用p6spy来打印日志,不过在生产环境中不建议开启。