Kam*_*icz 4 java mysql hibernate jpa spring-data
在 MySQL 中它有效:
SELECT * FROM carparks a
LEFT JOIN (SELECT * FROM locales_carparks)
c ON a.carpark_id=c.carpark_id
Run Code Online (Sandbox Code Playgroud)
热翻译成JPA:
@Query("SELECT a FROM Carparks a LEFT JOIN("
+"SELECT b FROM a.locales b"
+")")
Run Code Online (Sandbox Code Playgroud)
IllegalArgumentException:org.hibernate.hql.internal.ast.QuerySyntaxException:意外标记:(第 1 行附近,第 72 列 [SELECT a FROM database.model.carpark.Carparks a LEFT JOIN(SELECT b FROM a.locales b)]
我已经简化了示例以显示问题的本质。通常我只使用它SELECT a FROM Carparks a LEFT JOIN a.locales并且它有效,但在我的情况下我想使用嵌套的 SELECT 因为我的查询要复杂得多
你可以使用一个简单的替代方案
create view v_carparks as
SELECT * FROM carparks a
LEFT JOIN (SELECT * FROM locales_carparks)
c ON a.carpark_id=c.carpark_id
Run Code Online (Sandbox Code Playgroud)
并将其用于查询
@Query("SELECT a FROM v_carparks")
Run Code Online (Sandbox Code Playgroud)
特别是如果查询很复杂,那么为了隐藏这种复杂性而使用巨大的查询会更清晰。
编辑 :
您不能将嵌套查询用于连接。这在HQL 文档中是这样写的:
请注意,HQL 子查询只能出现在 select 或 where 子句中。
这可以解释为映射系统。很难用子查询结果进行映射。
| 归档时间: |
|
| 查看次数: |
13252 次 |
| 最近记录: |