在MySQL中它起作用:
SELECT * FROM carparks a
LEFT JOIN (SELECT * FROM locales_carparks)
c ON a.carpark_id=c.carpark_id
很高兴将其翻译为JPA:
@Query("SELECT a FROM Carparks a LEFT JOIN("
+"SELECT b FROM a.locales b"
+")")
抛出:IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException:意外令牌: (第1栏第72栏附近[SELECT a FROM database.model.carpark.Carparks LEFT JOIN(SELECT b 来自a.locales b)]
我简化了示例来展示问题的本质。通常我只使用SELECT a FROM Carparks a LEFT JOIN a.locales
并且它可以工作,但在我的情况下我想使用嵌套的SELECT,因为我的查询要复杂得多
答案 0 :(得分:4)
您可以使用简单的替代方案
create view v_carparks as
SELECT * FROM carparks a
LEFT JOIN (SELECT * FROM locales_carparks)
c ON a.carpark_id=c.carpark_id
并将其用于查询
@Query("SELECT a FROM v_carparks")
特别是如果查询很复杂,那么在视图中使用大量查询来隐藏这种复杂性会更加清晰。
编辑:
您无法使用嵌套查询进行连接。这是用HQL documentation这样写的:
请注意,HQL子查询只能出现在select或where子句中。
这可以解释为映射系统。很难用子查询结果进行映射。
答案 1 :(得分:0)
你可以像这样写
@Query("SELECT a FROM Carparks a LEFT JOIN Locales b on a.carpark_id = b.carpark_id")