LEFT加入不使用JPA,CriteriaQuery

时间:2017-01-30 10:06:21

标签: java hibernate jpa join predicate

我有两个one-to-many关联表:

Student            Subject
------------     ----------------------
ID|name|age      ID | Student_FK | name
------------     ----------------------

学生可以拥有与他相关的任意数量的科目。 (也没有受试者)。现在我想让所有学生

  

subject.name =' PHYSICS' OR 根本没有主题(NULL)

我使用QueryBuilder和谓词来生成查询,以下是代码片段。

CriteriaBuilder cb = mEntityManager.getCriteriaBuilder();
CriteriaQuery cq = cb.createQuery(mEntityClass);
Root root = cq.from(mEntityClass);
cq.select(root);
List<String> subjectList = new ArrayList<>();
subjectList.add("PHYSICS");
Join  subjectJoin= root.join("subjects", JoinType.LEFT);
Predicate predicate1 = subjectJoin.get("name").in(subjectList);
Predicate predicate2 = subjectJoin.get("name").isNull();
Predicate predicate = cb.or(predicate1,predicate2);
predicates.add(predicate);
cq.where(predicates.toArray(new Predicate[] {}));

当我做mEntityManager.createQuery(cq).getResultList()时。我得到错误 -

  

旧样式外连接(+)不能与ANSI连接一起使用

所以我的问题是 -

  1. 如何使用CritariaQuery进行LEFT联接?
  2. 是否有其他方法可以获得所有学生名单(包括主题/没有主题)?

0 个答案:

没有答案