【问题标题】:Java + Hibernate - Print query with values to console [duplicate]Java + Hibernate - 将带有值的查询打印到控制台[重复]
【发布时间】:2025-11-29 01:40:01
【问题描述】:

我想将休眠生成的 sql 查询打印到控制台。

insert into ORDERS (CRETN_DT, CRETN_USER_ID, LAST_UPDT_DT, LAST_UPDT_USER_ID, ORDER_ID) values (?, ?, ?, ?, ?)

这是我在控制台上看到的。代替 ? ,是否可以打印实际值?我不想在查询下方打印参数值,而是将 ?s 替换为可以针对 db 执行的实际值。

【问题讨论】:

  • 这会生成查询和参数no?
  • 感谢您的链接。但是我希望将 ?s 替换为实际值。列出的方法似乎列出了查询下方的参数。
  • 那可能是因为不可能。对于大多数数据库驱动程序,查询是使用这些参数占位符准备的,并且值总是单独发送。查询中永远不会使用这些值而不是参数值进行查询,因此大多数工具不会尝试生成它,因为它不是很有用(容易出错,额外的代码维护,以这种方式生成的查询实际上可能不会对目标数据库等有效)。
  • 尝试 logback。在 logback.xml 中使用下一个设置,记录休眠绑定值:

标签: java oracle hibernate


【解决方案1】:

您可以使用datasource-proxyp6spy

这允许您查看触发 SQL 时使用的实际参数值。配置示例见here

示例格式如下:

名称:DATA_SOURCE_PROXY,时间:6,成功:真, 类型:准备,批次:True,QuerySize:1,BatchSize:3, 查询:[“插入帖子(标题,版本,id)值(?,?,?)”], 参数:[(帖子编号 0, 0, 0), (帖子编号 1, 0, 1), (帖子编号 2, 0, 2)

【讨论】:

  • 谢谢@Madhusudana