1

我希望条件生成器立即使用连接放置 AND 条件(下面的查询中的第一个左连接)。但是当我将条件放在谓词中时,它会将 if 添加到最终的 where 子句中。

我想要这样的输出:

    选择
            *
        从
            里程碑里程碑0_
        左外连接
            disc_user_milestone_watch userswatch1_
                在里程碑0_.id=userswatch1_.milestone_id AND userswatch1_.disc_user_id=2  
        左外连接
            disc_user discuser2_
                在 userswatch1_.disc_user_id=discuser2_.id 交叉
        加入
            竞选活动 3_ 交叉
        加入
            部门部门4_
        在哪里
            里程碑0_.campaign=campaign3_.id
            和里程碑0_.department=department4_.id;

但是在将条件放入谓词之后,我在最后的 where 子句中得到了 AND 条件。目前我是这样的:

    选择
            *
        从
            里程碑里程碑0_
        左外连接
            disc_user_milestone_watch userswatch1_
                在里程碑0_.id=userswatch1_.milestone_id   
        左外连接
            disc_user discuser2_
                在 userswatch1_.disc_user_id=discuser2_.id 交叉
        加入
            竞选活动 3_ 交叉
        加入
            部门部门4_
        在哪里
            里程碑0_.campaign=campaign3_.id
            和里程碑0_.department=department4_.id
            AND userswatch1_.disc_user_id=2;

有什么方法可以立即添加 AND 条件加入?

我当前的代码如下所示:

    EntityManager em = Milestone.entityManager();
    CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder();
    CriteriaQuery criteriaQuery = criteriaBuilder.createQuery(UserMilestoneWatchStatus.class);

    根里程碑Root = criteriaQuery.from(Milestone.class);
    加入里程碑discUserJoin = landmarkRoot.join("usersWatching", JoinType.LEFT);

    // 这用于将里程碑表扩展到用户表
    表达式 userId = landmarkdiscUserJoin.get("id"); // ID
    int currUserId = Integer.parseInt(params.get("currUserId").toString());

    里程碑Root.alias("x");
    criteriaQuery.select(criteriaBuilder.construct(UserMilestoneWatchStatus.class,milestoneRoot,userId));
    标准查询.distinct(true);

    列表谓词List = new ArrayList();
    predicatesList.add(criteriaBuilder.or(criteriaBuilder.equal(userId, currUserId), criteriaBuilder.isNull(userId)));

    criteriaQuery.where(criteriaBuilder.and(predicatesList.toArray(new Predicate[predicatesList.size()]))).orderBy(sort);

什么是立即添加 AND 条件以加入而不是在哪里?

4

1 回答 1

1

不,没有办法做到这一点。JPA 2.0 不支持使用 ON 子句连接。可能它将成为JPA 2.1的一部分。

于 2012-10-18T18:58:34.057 回答