我希望CriterAibuilder立即将其放置和条件(在查询下方的第1个左JOIN)。但是,当我将条件放在谓词中时,它会添加到最终条款中。
我想要这样的输出:
选择 * 从 里程碑里程碑0_ 左外连接 disc_user_milestone_watch用户watch1_ 在Milestone0_.id上 左外连接 disc_user concuser2_ 在用户watch1_.disc_user_id = conser2_.id cross上 加入 竞选活动3_ Cross 加入 部门4_ 在哪里 Milestone0_.campaign =竞选3_.id 和milestone0_.department = depption4_.id;
,但是在将条件放在谓词中后,我会在最终条款中得到和条件。目前,我正在像这样:
选择 * 从 里程碑里程碑0_ 左外连接 disc_user_milestone_watch用户watch1_ 在Milestone0_.id上=用户watch1_.milestone_id 左外连接 disc_user concuser2_ 在用户watch1_.disc_user_id = conser2_.id cross上 加入 竞选活动3_ Cross 加入 部门4_ 在哪里 Milestone0_.campaign =竞选3_.id 和Milestone0_.department = dectment4_.id and userswatch1_.disc_user_id = 2;
立即加入和条件的方法是什么?
我当前的代码看起来像这样:
EntityManager em = Milestone.entityManager(); CriterAibuilder Criteriabuilder = EM.GetCriterAibuilder(); criteriaquery criteriaquery = criteriabuilder.createquery(usermilestoneWatchStatus.Class); root milestoneroot = criteriaquery.from(Milestone.Class); 加入MilestonediscuserJoin = Milestoneroot.join("用户观看",intemype.Left); //这用于将里程碑表扩展到用户表 expression userId = morestonediscuserjoin.get(" id");//ID int curruserid = integer.parseint(params.get(" curruserid")。toString()); Milestoneroot.alias(" x"); criteriaquery.Select(criteriabuilder.construct(usermilestoneWatchStatus.Class,Milestoneroot,userId)); criteriaquery.distinct(true); 列表PredicatesList = new ArrayList(); predicateslist.Add(criteriabuilder.or(criteriabuilder.equal.equal(userId,curruserid),criteriabuilder.isnull(userId))); criteriaquery.Where(criteriabuilder.和(predicateslist.toArray(新的predicate [predicateslist.size())))。
什么是立即加入和条件加入而不是在哪里加入的方法?
不,没有办法做到这一点。JPA 2.0不支持加入ON子句。可能是JPA 2.1的一部分。