Root<Purchases> purchasesRoot = cq.from(Purchases.class);
Root<TaskProcesses> taskProcessesRoot = cq.from(TaskProcesses.class);
//task
Subquery<Tasks> tasksSubquery = cq.subquery(Tasks.class);
// task process
Subquery<TaskProcesses> taskProcessesSubquery = cq.subquery(TaskProcesses.class);
//Join<Tasks,TaskProcesses> tasksTaskProcessesJoin = tasksRoot.join("taskProcesses",JoinType.LEFT);
//Join<Tasks,Purchases> purchasesTasksJoin = tasksRoot.join("tasks",JoinType.LEFT);
taskProcessesSubquery.select(taskProcessesRoot);
taskProcessesSubquery = taskProcessesSubquery.where(cb.and(
cb.equal(tasksRoot.get("id"),taskProcessesRoot.get("taskId")),
cb.in(taskProcessesRoot.get("orgId")).value(this.getOrgIds()),
cb.equal(taskProcessesRoot.get("type"),"purchase"),
cb.equal(taskProcessesRoot.get("status"),intStatusNum)
));
tasksSubquery.select(tasksRoot);
tasksSubquery = tasksSubquery.where(cb.and(
cb.equal(root.get("id"),tasksRoot.get("missionId")),
cb.equal(tasksRoot.get("missionType"),"purchase"),
cb.exists(taskProcessesSubquery)
));
predicate.add(cb.and(
cb.exists(tasksSubquery),
cb.equal(root.get("status"),intStatusNum)
));
我的错误如下:
Caused by: java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: where near line 1, column 317 [select generatedAlias0 from com.runoclound.warehouse.model.Purchases as generatedAlias0, com.runoclound.warehouse.model.Tasks as generatedAlias1, com.runoclound.warehouse.model.Purchases as generatedAlias2, com.runoclound.warehouse.model.TaskProcesses as generatedAlias3 where ( exists (select generatedAlias1 from where ( generatedAlias0.id=generatedAlias1.missionId ) and ( generatedAlias1.missionType=:param0 ) and ( exists (select generatedAlias3 from where ( generatedAlias1.id=generatedAlias3.taskId ) and ( generatedAlias3.orgId in (:param1) ) and ( generatedAlias3.type=:param2 ) and ( generatedAlias3.status=0 )) )) ) and ( generatedAlias0.status=0 ) order by generatedAlias0.createdAt desc]