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 中使用下一个设置,记录休眠绑定值:您可以使用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 的值?
Spring Boot / Thymeleaf / Hibernate:带有 Java 注解的 Sessionfactory Bean