我有两个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连接一起使用
所以我的问题是 -