如何将此 SQL 查询转换为 Hibernate 的 HQL?

How to translate this SQL query into Hibernate's HQL?

以前使用过 Hibernate 但从未达到这种程度,我在尝试将以下查询转换为有效的 Hibernate SQL 查询时遇到了困难。

SELECT * FROM
(SELECT * FROM scripts WHERE (script.type LIKE 'DATA'))
AS A JOIN
(SELECT * FROM req_executions  
WHERE (req_executions.fk_database NOT IN 
(SELECT executions.fk_database FROM executions
WHERE executions.fk_script = req_executions.fk_script))
OR ((req_executions.fk_database = 12 AND req_executions.fk_database != 8) 
AND req_execution.fk_database NOT IN (SELECT executions.fk_database FROM execution
WHERE executions.fk_script = req_executions.fk_script)))
AS B
ON (A.id = B.fk_script)

此查询的结果是经过过滤的 table 等待执行的脚本。 我试过类似的东西:

"SELECT req FROM (SELECT s FROM Script s  
WHERE( s.filename LIKE :filename AND s.type = :scriptType AND s.ticketNumber LIKE :ticketNumber ) 
JOIN (SELECT re FROM RequiredExecution re 
WHERE (re.key.databaseId NOT IN (SELECT e.database FROM Execution e WHERE e.script.id = re.key.scriptId))
OR ((re.key.databaseId = :forAllId AND :dbId != :syncId)
AND re.key.databaseId NOT IN
(SELECT e.database FROM Execution e WHERE e.script.id = re.key.scriptId)))) WHERE (s.id = re.key.scriptId)"

并使用 "AS" 但我离解决方案还很远。有什么建议吗?

我以为你必须 select 来自一个实体而不是另一个 SELECT ...我不知道这是否可能,反正看起来很难。

您可以考虑坚持使用本机 SQL 查询调用 session.createSQLQuery("the native SQL")。 和 .addEntity(YourEntityClass.class) 自动映射结果 和 .setParameter(,基于 0 的编号,而查询使用 ? 占位符而不是 :named_parameter.

最后我被迫改用 nativeQuery,因为“...HQL 子查询只能出现在 select 或 where 子句中。”如 14.13. Subqueries.

中所述