Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java QuerySyntaxException:意外标记:_Java_Mysql_Hibernate_Jpa_Spring Data - Fatal编程技术网

Java QuerySyntaxException:意外标记:

Java QuerySyntaxException:意外标记:,java,mysql,hibernate,jpa,spring-data,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 热翻译成JPA: @Query("SELECT a FROM Carparks a LEFT JOIN(" +"SELECT b FROM a.locales b" +")") IllegalArgumentExc

在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列附近[从 database.model.carpark.Carparks a左接缝选择b 来自a.locales b]


我简化了这个例子来说明问题的本质。通常我使用justSELECT a FROM Carparks a LEFT JOIN a.locales,但在我的例子中,我想使用嵌套选择,因为我的查询要复杂得多

您可以这样编写它

@Query("SELECT a FROM Carparks a LEFT JOIN Locales b on a.carpark_id = b.carpark_id")

你可以使用一个简单的替代方案

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子查询只能出现在select或where子句中


这可以解释为映射系统。很难使用子查询结果进行映射。

嘿,您的实体是否映射为一对多之类的关系?一种简单的编写方法是@QuerySelect*从a左a左a连接B在a.id=B.ids上。当然,我使用关系,我想简化它,这就是我没有包含它的原因。是的,我试着在a.id=b.id上加入,但对于JPA,这不起作用,因为JPA会自动识别这种关系。关键字onmust被省略关键字onmust被省略为什么?因为ON子句来自映射的join列,并且是由anks自动处理的,所以我通常使用SELECT a from Carparks a LEFT join a.locales,它可以工作,但是在我的例子中,我想使用嵌套SELECT,因为我的查询要复杂得多,我将更新问题以澄清它。你是对的,你的解决方案更好,但是否有可能以某种方式让它按照我的方式工作?@user3871754,没有。这在HQL文档中。让我更新我的答案我测试了它,得到了:视图的SELECT在FROM子句中包含一个子查询wait,Hibernate告诉你该视图无法调用?不,我尝试从phpAdmin创建视图我想我必须将mySQL更新到5.7: