【发布时间】:2017-04-17 02:05:24
【问题描述】:
在 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"
+")")
非法参数异常: 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,因为我的查询要复杂得多
【问题讨论】:
-
嘿,你的实体是用一对多的关系映射的吗?
-
一个简单的写法是@Query("Select * from A a left join B b on a.id=b.id")
-
所以我当然使用关系,我想简化它,这就是我没有包含它的原因。是的,我尝试在 a.id=b.id 上加入,但是对于 JPA,这不起作用,因为 JPA 会自动识别这种关系。并且关键字“on”必须省略
-
关键字“on”必须省略这是为什么呢?
-
因为 ON 子句来自映射的连接列并且是自动处理的
标签: java mysql hibernate jpa spring-data