我有一个用例,我需要在值列表中搜索表。下面是架构:
案例表
案例ID
CASE_CIN 表
案例ID
辛
CASE 和 CASE_CIN 表通过Many to Many连接。
我需要根据提供的 CIN 列表搜索案例。这是我试图实现的 SQL:
select distinct c.* from case c left join case_cin cc on c.case_id = cc.case_id where cc.cin in ("cin1", "cin2", "cin3");
这就是我基于单个 CIN 设计过滤条件的方式:
public static Specification<CaseEntity> buildSpecification(CaseSearchRequestDto criteria, String userName) {
return (root, query, cb) -> {
List<Predicate> predicates = new ArrayList<>();
if (!isEmpty(criteria.getAssociatePartyCins())) {
predicates.add(buildAssociatePartyCinsFilterPredicate(root, cb, query, criteria.getAssociatePartyCins());
}
return cb.and(predicates.toArray(new Predicate[0]));
};
}
private static Predicate buildAssociatePartyCinsFilterPredicate(Root<CaseEntity> root, CriteriaBuilder cb, CriteriaQuery query, List<String> cins) {
Predicate filterPredicate = cb.disjunction();
ListJoin<CaseEntity, String> cinsJoin = root.joinList(FIELD_CASE_CINS, LEFT);
filterPredicate.getExpressions().add(startWithString(cinsJoin, cb, **cins.get(0)**); // need to change logic here.
query.distinct(true);
return filterPredicate;
}
我还希望每个 CIN 都完全匹配,而不是startWithString.
任何人都可以帮助修改代码以允许按多个值进行搜索吗?