【问题标题】:Condition left join in CriteriaQueryCriteriaQuery 中的条件左连接
【发布时间】:2015-01-10 08:55:48
【问题描述】:

大家好,我想在 CriteriaQuery 中执行此操作,我搜索了很长时间,但找不到任何可以执行的操作,有人可以帮助我吗?

SELECT b.name
FROM Empl a 
LEFT OUTER JOIN Deplo b ON (a.id_depl = b.id_depl) AND b.id_place = 2;

我只是想在左连接子句中做一个条件,我看到了“.on”函数,但我不知道它是否会起作用以及它是如何起作用的,因为我试图做这样的事情:

Join Table1, Table2j1 = root.join(Table1_.table2, JoinType.LEFT).on(cb.and(cb.equal(table2_.someid, someId)));

但它需要一个布尔表达式。

【问题讨论】:

    标签: jpa orm left-join clause criteriaquery


    【解决方案1】:

    on 子句已在 JPA 2.1 中引入。示例解决方案:

        CriteriaBuilder cb = em.getCriteriaBuilder();
        CriteriaQuery<String> cq = cb.createQuery(String.class);
        Root<Empl> a = cq.from(Empl.class);
        Join<Empl,Deplo> b = a.join("b", JoinType.LEFT); //left outer join
        b.on(
            cb.and(
                cb.equal(b.get("id_place"), cb.parameter(Integer.class, "idPlace")),
                cb.equal(b.get("id_depl"), a.get("id_depl"))
            )   
        );
        cq.select(b.<String>get("name"));
    
        List<String> results = em.createQuery(cq)
                                 .setParameter("idPlace", 2)
                                 .getResultList();
    

    【讨论】:

      猜你喜欢
      • 2012-02-27
      • 2015-07-18
      • 2015-05-13
      • 1970-01-01
      • 1970-01-01
      • 2015-02-14
      • 1970-01-01
      • 2011-12-11
      • 2020-10-20
      相关资源
      最近更新 更多