在冬眠中,使用Criteriabuilder如何立即添加条件,而不是作为条件的一部分



我希望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的一部分。

最新更新