spring-data-jpa 提取已填充参数的已准备查询

t30tvxxf  于 2022-11-10  发布在  Spring
关注(0)|答案(1)|浏览(148)

我们正在使用Micronaut JPA Data和Hibernate。
我们有一个动态标准生成器,我们希望基于它生成SQL语句。
使用该SQL查询时,我们需要验证查询和/或在我们无法控制的其他DB/服务器中执行查询。
Hibernate提供了一种派生预处理语句的方法,并且可以对其进行检索,但它并不包含所有参数。**那么,是否有一种方法可以获取可以直接在DB中执行的最终查询?**目前,我们必须手动获取预处理语句并填写所有问号。
SQLExtractor可用于提取查询,但我们需要提取填充参数的查询,或以列表形式获取参数的任何其他方式。
请注意,我们对 predicate 使用CriteraBuilder,我们使用多个根,因此使用交叉连接(使用where条件,使其成为内部连接)以及主表和连接表中的 predicate 。
我们也使用hibernate.criteria.literal_handling_mode=inline
示例创建了一个存储库here
第一个
SQLExtractor.from返回以下内容

select user0_.id as id1_1_, user0_.name as name2_1_ from user user0_ cross join cycle cycle1_ where user0_.name='a' and user0_.id=cycle1_.id and cycle1_.type=? and cycle1_.created=?

这里,我们需要某种方法来获取填充了?的SQL,或者获取可以填充到?的参数列表
期望值

select user0_.id as id1_1_, user0_.name as name2_1_ from user user0_ cross join cycle cycle1_ where user0_.name='a' and user0_.id=cycle1_.id and cycle1_.type='A' and cycle1_.created='2022-10-31'
icomxhvb

icomxhvb1#

您可以尝试从Hibernate QueryParameters中提取绑定值,但这不是一项容易的任务,而且,用文字替换参数标记是依赖于类型的。因此,以一般方式进行此类操作并不容易。
我建议您坚持使用参数标记,因为这也提高了语句缓存命中率。

相关问题