org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: on

问题描述 投票:0回答:1

我想运行一个查询,但不知道是否支持,我面临的问题是我想在查询中传递一个列表。我在查询中也有一些联接,查询失败,并出现以下信息。

org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: on.

我如何才能使之工作?

EntityManager em = emf.createEntityManager();
Query query = em.createQuery(
   " SELECT s,c from Sow s left join ChildSow c " + 
   "  inner join Project p on p.projectId = s.projectId on s.employeeId = c.employeeId " + 
   "  and s.projectId = c.correctProjectId ");

@SuppressWarnings("unchecked")
List<Object> list =  query.getResultList();
em.close();
9:56:35.195 [http-nio-8080-exec-1] ERROR o.h.hql.internal.ast.ErrorTracker - line 1:211: unexpected token: on
19:56:35.204 [http-nio-8080-exec-1] ERROR o.h.hql.internal.ast.ErrorTracker - line 1:211: unexpected token: on
antlr.NoViableAltException: unexpected token: on
    at org.hibernate.hql.internal.antlr.HqlBaseParser.atom(HqlBaseParser.java:3633)
    at org.hibernate.hql.internal.antlr.HqlBaseParser.unaryExpression(HqlBaseParser.java:3401)
    at org.hibernate.hql.internal.antlr.HqlBaseParser.multiplyExpression(HqlBaseParser.java:3273)
    at org.hibernate.hql.internal.antlr.HqlBaseParser.additiveExpression(HqlBaseParser.java:2930)
    at org.hibernate.hql.internal.antlr.HqlBaseParser.concatenation(HqlBaseParser.java:615)
    at org.hibernate.hql.internal.antlr.HqlBaseParser.relationalExpression(HqlBaseParser.java:2697)
    at org.hibernate.hql.internal.antlr.HqlBaseParser.equalityExpression(HqlBaseParser.java:2653)
    at org.hibernate.hql.internal.antlr.Hql
hibernate jpa jpql
1个回答
0
投票

你应该按照以下方式修正你的查询。

List<Object[]>  result = em.createQuery(
    "SELECT s, c from Sow s left join ChildSow c " + 
    "inner join Project p on p.projectId = s.projectId " + 
    "where s.employeeId = c.employeeId and s.projectId = c.correctProjectId",
Object[].class).getResultList();

result.forEach(row -> {
   Sow sow =  (Sow) row[0];
   ChildSow childSow = (ChildSow) row[1];
   // ...
});

请注意,当你的查询使用多个 根实体引用 你将得到的结果是一个列表 Object[].

© www.soinside.com 2019 - 2024. All rights reserved.