我想运行一个查询,但不知道是否支持,我面临的问题是我想在查询中传递一个列表。我在查询中也有一些联接,查询失败,并出现以下信息。
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
你应该按照以下方式修正你的查询。
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[]
.