我在实体上有@ManyToMany或@OneToMany关联,我正在考虑更好的用例:
对象中的每个对象使用迭代 并执行 criteriaBuilder.isMember(object,collection)
使用 root.join(集合)而不是 joinedRoot.in(对象)
这里是代码示例:
List<Predicate> orPredicates = new ArrayList<>();
for(Industry industry : industries) {
orPredicates.add( criteriaBuilder.isMember(industry, provider.get(Provider_.industries)) );
}
predicates.add( criteriaBuilder.or(orPredicates.toArray(new Predicate[] { })) );
和第二种可能的解决方案
Join<Provider, Industry> industryRoot = provider.join(Provider_.industries)
industryRoot.in(industries);
// here i need also to add .distinct(true) on select
我考虑.isMember()函数是否通过集合属性与关联实体进行圆顶连接?