gpt4 book ai didi

sql - 静态 hibernate 和空运行 HQL 查询

转载 作者:行者123 更新时间:2023-12-04 18:16:49 26 4
gpt4 key购买 nike

我想“试运行”Hibernate HQL 查询。那就是我想知道 Hibernate 将从给定的 HQL 查询中执行哪些实际的 SQL 查询,而无需针对真实数据库实际执行 HQL 查询。

我可以访问表的 hibernate 映射、HQL 查询字符串、dialect对于我的数据库。如果需要,我也可以访问数据库。

现在,我如何才能找出 Hibernate 可以从我的 HQL 生成的所有 SQL 查询,而无需实际对任何数据库执行查询?有什么工具可以做到这一点吗?

请注意,可以从一个 HQL 查询生成许多 SQL 查询,并且生成的 SQL 查询集可能会根据数据库的内容而有所不同。

我不是在问如何在 HQL 查询执行时记录 SQL 查询。

编辑:我不介意连接到数据库来获取一些元数据,我只是不想执行查询。

编辑:我也知道查询应用了哪些限制和偏移量。我也有将绑定(bind)到查询的实际参数。

最佳答案

简短的回答是“你不能”。长答案如下。

您可以采取两种方法:

A) 查看 HQLQueryPlan class ,尤其是它的 getSqlStrings() method .它不会给你准确 SQL,因为在实际执行查询之前涉及进一步的预处理(绑定(bind)参数,应用限制/偏移量等),但它可能与您想要的足够接近。

这里要记住的是,您需要一个实际的 SessionFactory实例以构造 HQLQueryPlan ,这意味着如果没有“连接到任何数据库”,您将无法这样做。但是,您可以使用内存数据库(SqlLite 等)并让 Hibernate 自动为其创建必要的模式。

B) 从 ASTQueryTranslatorFactory 开始并陷入 AST/ANTLR 疯狂。从理论上讲,您可能能够在不依赖元数据的情况下拼凑出一个可以工作的解析器,但我很难想象您正在尝试做些什么才值得。也许你可以澄清一下?有成为更好的方法。

关于sql - 静态 hibernate 和空运行 HQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1882583/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com