【问题标题】:Spring / Hibernate: JPA exception :: path expected for JOINSpring/Hibernate:JPA 异常 :: JOIN 预期路径
【发布时间】:2016-11-02 21:40:31
【问题描述】:

Getting QuerySyntaxException 试图运行这个查询:

public interface SignalRepository extends PagingAndSortingRepository<Signal, Long> {

...
@Query("select p1 from Signal p1 LEFT JOIN Signal p2 " 
        + " ON (p1.zoneId = p2.zoneId AND p1.createdAt < p2.createdAt) "
        + " where p2.id is null AND p1.userId=?#{[0]} AND p1.pid=?#{[1]}")

产生这个错误:

caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: Path expected for join! [select p1 from com.newco.models.Signal p1 LEFT JOIN Signal p2  ON (p1.zoneId = p2.zoneId AND p1.createdAt < p2.createdAt)  where p2.id is null AND p1.userId=?1 AND p1.pid=?2]
at org.hibernate.hql.internal.ast.QuerySyntaxException.convert(QuerySyntaxException.java:74) ~[hibernate-core-5.0.11.Final.jar:5.0.11.Final]
at org.hibernate.hql.internal.ast.ErrorCounter.throwQueryException(ErrorCounter.java:91) ~[hibernate-core-5.0.11.Final.jar:5.0.11.Final]
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:268) ~[hibernate-core-5.0.11.Final.jar:5.0.11.Final]

当键入 SQL 命令行(和 Ruby on Rails)时,此查询运行良好,但在 Spring/JAP 中失败。

【问题讨论】:

  • JPQL != SQL ...

标签: java spring hibernate spring-mvc jpa


【解决方案1】:

连接的预期路径!

使用 JPQL,您不能像在 SQL 中那样编写 JOIN。您必须精确连接关系的路径


要么执行原生 SQL 查询:

Query q = em.createNativeQuery("YourQuery", Signal.class);

您可以在 JPQL 查询中调整您的 SQL 查询。
为此,您应该更改几项内容。

1) 我不确定 JPA 是否能识别这种语法:p1.userId=?#{[0]} AND p1.pid=?#{[1]} 来设置参数值。您应该使用:p1.userId=:?1 and p1.pid=:?2

2)承认你在Signal实体中声明一个自反关系(p2),LEFT JOIN条件应该是这样的(JOIN是在实体关系上创建的,ON变成WITH):

"select p1 FROM Signal p1 LEFT JOIN p1.p2 p2 " 
        + " WITH p1.createdAt < p2.createdAt "
        + " where p2.id is null AND p1.userId=:?1 AND p1.pid=:?2

3)WITH 中不需要p1.zoneId = p2.zoneId 条件,如果Signal 实体具有基于此条件的自反关系。

【讨论】:

    猜你喜欢
    • 2019-12-21
    • 1970-01-01
    • 1970-01-01
    • 2015-11-09
    • 2018-06-21
    • 2020-03-23
    • 1970-01-01
    • 2017-09-14
    • 2016-06-28
    相关资源
    最近更新 更多