提问人:Kaypro II 提问时间:8/12/2020 最后编辑:Kaypro II 更新时间:8/14/2020 访问量:1529
如何控制 Hibernate 在其生成的查询中使用的 SQL 表别名?
How can I control the SQL table aliases that Hibernate uses in its generated queries?
问:
tl;dr:Hibernate 在其查询中自动生成 SQL 表别名,例如 或 。下面是一个示例查询:jurisdicti4_
this_
SELECT
this_.id AS id2_6_3_,
this_.a_table_column AS a_table_column3_6_3_,
jurisdicti4_.b_table_column AS b_table_column4_6_3_,
FROM
app_table_a this_
LEFT OUTER JOIN jurisdiction jurisdicti4_ ON this_.jurisdiction = jurisdicti4_.name
WHERE
this_.a_table_column = ?
我正在使用 Hibernate Criteria API 添加一些提示,这些提示需要在查询中引用 SQL 别名,因此我需要知道如何:
- 指定 Hibernate 将在其查询中使用的 SQL 表别名(例如,告诉它 use 而不是 for ,或者
juris
jurisdicti4_
jurisdiction
- get hibernate 告诉我它将用于特定表或实体的确切 SQL 表别名(例如,被告知查询中的别名将是 .
jurisdiction
jurisdicti4_
全文:
我继承了一个带有 Oracle 数据库的 Java 应用程序,该数据库使用 Hibernate 4.3.8 和 Hibernate Criteria API 来生成一些复杂的搜索查询。它最近遇到了一个严重的 SQL 性能问题,需要我们开始包含这些查询的提示。但是,我们使用 Oracle,其索引提示的形式为:
/*+ index (TABLE_ALIAS INDEX_NAME) */
我已经成功地添加了所需的提示,但是我不得不在提示字符串中对 Hibernate 生成的提示进行硬编码。我担心随着时间的流逝,别名可能会发生变化,因此我想控制它们的生成方式,或者能够检索其值以在添加 SQL 提示时使用。Criteria.addHint(...)
TABLE_ALIAS
编辑:此网站描述了 Hibernate SQL 别名生成过程:https://prismoskills.appspot.com/lessons/Hibernate/Chapter_23_-_Hibernate_alias_names.jsp
我发现当我以编程方式设置连接时,我可以部分控制 SQL 别名,如下所示: .我传递的值似乎用作表的 SQL 别名的第一部分。但是,Hibernate 会将某种生成的表 ID 整数附加到该整数中,因此我会得到类似于生成的 SQL 的内容。此外,这似乎只适用于我在标准中设置的联接。Hibernate 通常会根据映射添加自己的映射,我不确定如何对这些映射进行相同级别的部分控制。criteria.createAlias(associationPath, alias)
alias
myalias4_
答: 暂无答案
评论