在 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: unexpected token: ( near line 1, column 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
并将其用于查询
@Query("SELECT a FROM v_carparks")
特别是如果查询很复杂,在 View 中使用一个巨大的查询来隐藏这种复杂性会更干净。
编辑:
您不能使用嵌套查询进行连接。这是写在HQL documentation像这样:
Note that HQL subqueries can occur only in the select or where clauses.
这可以解释为 map 系统。很难用子查询结果进行映射。
关于java - 查询语法异常 : unexpected token:,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40927513/