当前位置: 首页 > 面试题库 >

休眠和空运行的HQL查询静态

商振
2023-03-14
问题内容

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

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

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

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

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

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

编辑:我也知道什么限制和偏移量应用于查询。我也有将绑定到查询的实际参数。


问题答案:

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

您可以采用两种方法:

A)研究HQLQueryPlan类,特别是它的getSqlStrings()方法。它不会为您提供
确切的 SQL,因为在实际执行查询之前会进行进一步的预处理(绑定参数,应用限制/偏移量等),但它可能与您想要的足够接近。

这里要记住的事情是,您需要一个实际的SessionFactory实例来进行构造HQLQueryPlan,这意味着如果不“连接到任何数据库”就无法做到这一点。但是,您可以使用内存数据库(SqlLite等),并让Hibernate自动为其创建必要的架构。

B)开始ASTQueryTranslatorFactory并陷入AST
/ ANTLR疯狂。从理论上讲,您可能可以破解一个无需依赖元数据就可以工作的解析器,但是我很难想象要为此付出的努力。也许您可以澄清一下?有
是一个更好的办法。



 类似资料:
  • 问题内容: 我想“试运行” Hibernate HQL查询。那就是我想知道Hibernate从给定的HQL查询中执行什么实际的SQL查询,而无需实际对真实数据库执行HQL查询。 我可以访问表的休眠映射,HQL查询字符串,数据库的方言。如果需要,我也可以访问数据库。 现在,如何找出Hibernate可以从HQL生成的所有SQL查询,而无需实际对任何数据库执行查询呢?有什么工具吗? 请注意,可以从一个

  • 问题内容: 我对HQL查询和hibernate有疑问。 我有一个用户类和一个角色类。用户可以具有许多角色。所以我有一个像这样的ManyToMany关系: 在用户类别中: 在角色类中: 此映射创建了存储关系的第三个表(PORTAIL_USERROLE)。像这样一切正常。当我有一个用户时,我将检索角色。 但是,我的问题是:在HQL查询中,如何获得具有特定角色的所有用户?任何类都代表PORTAIL_US

  • 问题内容: 我有一个使用Hibernate在数据库上进行CRUD操作的Web应用程序。我收到一条错误消息,说该表未映射。查看Java文件: 错误信息: 这是我的方法: : 我应该如何修改才能正常工作? 问题答案: 异常消息怎么说?它说: 这告诉你什么?它告诉您未映射。也就是说,没有称为的映射类型。 确实,没有。您的映射类型称为。它映射到名为的表,但类型称为。在编写HQL(或JPQL)查询时,您使用

  • 问题内容: 我在使用Hibernate创建子查询时遇到问题。不幸的是Subqueries类几乎完全没有文档,因此我完全不知道如何将以下SQL转换为Hibernate Criteria: 我希望以下内容能够“正常工作”: 但不幸的是,事实并非如此。因此,看来我实际上必须使用Subqueries类来创建Criteria。但是我无法通过Google找到一个合理的例子,因此这使我在这里提出了疑问。 问题答

  • 问题内容: 当我尝试从数据库中删除条目时,使用 然后我可以执行以下操作: 1)如果该行存在于数据库中,则将执行两个SQL查询:一个选择,然后一个删除 2)如果数据库中不存在该行,则仅执行选择查询 但是同样,更新不是这种情况。无论是否存在数据库行,都只会执行更新查询。 请让我知道为什么这种行为用于删除操作。这不是性能问题,因为遇到了两个查询而不是一个查询? 编辑: 我正在使用休眠3.2.5 样例代码

  • 问题内容: 如何在Hibernate中编写此SQL查询?我想使用Hibernate创建查询,而不是创建数据库。 我在SQLServer2008中创建了实体类, 我试图以多种方式构建有效的选择查询,但仍然无法正常工作。 实体有问题吗? 问题答案: 仅当实体之间存在关联时才能使用联接。您的Employee实体不应将名称为,类型为的字段映射到列。它应该与Team实体具有ManyToOne关联,并映射为J