Java + Hibernate - 将带有值的查询打印到控制台[重复]

Posted

技术标签:

【中文标题】Java + Hibernate - 将带有值的查询打印到控制台[重复]【英文标题】:Java + Hibernate - Print query with values to console [duplicate] 【发布时间】:2018-10-01 15:24:30 【问题描述】:

我想将休眠生成的 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 中使用下一个设置,记录休眠绑定值: 【参考方案1】:

您可以使用datasource-proxy 或p6spy

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

示例格式如下:

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

【讨论】:

谢谢@Madhusudana

以上是关于Java + Hibernate - 将带有值的查询打印到控制台[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Hibernate:如何将 java.util.Map 与 java.util.Set 映射为带有 LocalDate 的值?

Hibernate -- 将具有单个值的视图映射到只读字段

Spring Boot / Thymeleaf / Hibernate:带有 Java 注解的 Sessionfactory Bean

java反射机制动态获取hibernate懒加载对象

java - 如何在java桌面应用程序中使用spring(事务)和hibernate创建嵌入式H2 DB?

java框架hibernate批量删除数据的时候用啥方法效率比较高?