标准生成器 API。 IN 子句查询
CriteriaBuilder API. IN clause query
有一个数据库架构,如下所示。
我从 sport
table.
收集了 Collection<String> sportCodes
个 codes
我可以建立谓词...
private Collection<String> sportCodes;
private Predicate searchBySportsPredicate(Root<PlaygroundEntity> root) {
return root.join(PlaygroundEntity_.specializations).get(SportEntity_.code).in(sportCodes);
}
...并得到 PlaygroundEntity
和集合 sportCodes
中包含的一组 sport codes
。
反之亦然如何?
即像这样构建谓词...
(sportCodes).in(root.join(PlaygroundEntity_.specializations).get(SportEntity_.code))
...并获得 PlaygroundEntity
和一组 sport codes
,其中包括集合 sportCodes
。
如有任何帮助,我将不胜感激。
这个问题我花了3天的时间,解决的太简单了:
private Predicate searchBySportsPredicate(Root<PlaygroundEntity> root, CriteriaBuilder cb) {
Collection<Predicate> predicates = new ArrayList<>();
for (String sportCode : sportCodes) {
predicates.add(
cb.equal(root.join(PlaygroundEntity_.specializations).get(SportEntity_.code), sportCode)
);
}
return cb.and(predicates.toArray(new Predicate[0]));
}
重要
无效:
private Predicate searchBySportsPredicate(Root<PlaygroundEntity> root, CriteriaBuilder cb) {
List<Predicate> predicates = new ArrayList<>(sportCodes.size());
Path<String> codePath = root.join(PlaygroundEntity_.specializations).get(SportEntity_.code)
for (String sportCode : sportCodes) {
predicates.add(cb.equal(codePath, sportCode));
}
return cb.and(predicates.toArray(new Predicate[0]));
}
希望对大家有所帮助。
有一个数据库架构,如下所示。
我从 sport
table.
Collection<String> sportCodes
个 codes
我可以建立谓词...
private Collection<String> sportCodes;
private Predicate searchBySportsPredicate(Root<PlaygroundEntity> root) {
return root.join(PlaygroundEntity_.specializations).get(SportEntity_.code).in(sportCodes);
}
...并得到 PlaygroundEntity
和集合 sportCodes
中包含的一组 sport codes
。
反之亦然如何?
即像这样构建谓词...
(sportCodes).in(root.join(PlaygroundEntity_.specializations).get(SportEntity_.code))
...并获得 PlaygroundEntity
和一组 sport codes
,其中包括集合 sportCodes
。
如有任何帮助,我将不胜感激。
这个问题我花了3天的时间,解决的太简单了:
private Predicate searchBySportsPredicate(Root<PlaygroundEntity> root, CriteriaBuilder cb) {
Collection<Predicate> predicates = new ArrayList<>();
for (String sportCode : sportCodes) {
predicates.add(
cb.equal(root.join(PlaygroundEntity_.specializations).get(SportEntity_.code), sportCode)
);
}
return cb.and(predicates.toArray(new Predicate[0]));
}
重要
无效:
private Predicate searchBySportsPredicate(Root<PlaygroundEntity> root, CriteriaBuilder cb) {
List<Predicate> predicates = new ArrayList<>(sportCodes.size());
Path<String> codePath = root.join(PlaygroundEntity_.specializations).get(SportEntity_.code)
for (String sportCode : sportCodes) {
predicates.add(cb.equal(codePath, sportCode));
}
return cb.and(predicates.toArray(new Predicate[0]));
}
希望对大家有所帮助。