gpt4 book ai didi

mysql - Spring JpaRepository findBy...In(Collection) 返回并集而不是交集

转载 作者:行者123 更新时间:2023-11-29 10:30:15 24 4
gpt4 key购买 nike

我的 JpaRepository 中有一个查询方法

    Page<Course> findDistinctCourseByAttrsInAllIgnoreCase(Set<String> a, Pageable page);

查找Course对象的实例变量 Set<String> attrs 。给定一组a对于“foo”和“bar”,我想找到Courseattrs包含“foo”“bar”,即 Course 的交集带有“foo”的和带有“bar”的。上面的方法返回一个联合。

有没有办法通过 JpaRepository 查询来做到这一点,还是我必须进行多次调用并自己找到交集?

最佳答案

在不太可能的情况下,您知道 a 的数量前面你可以将多个约束与 And 结合起来:

...AttrsInAndAttrsIn...

但即使前提条件成立,那也会非常难看。

因此,下一个最佳选择可能是一个规范和一个从 Set<String> 构造规范的工厂方法。或来自可变参数。

您的存储库需要扩展JpaSpecificationExecutor 。你可以这样调用它

Page<Course> findAll(matchesAll(attrs), pageable) 

工厂方法看起来像这样:

Specification<Course> matchesAll(Set<String> attrs) {
return (Root<T> root, CriteriaQuery<?> query, CriteriaBuilder builder) -> {
// construct Predicate by combining calls to builder.isMember
// https://docs.oracle.com/javaee/6/api/javax/persistence/criteria/CriteriaBuilder.html#isMember(E,%20javax.persistence.criteria.Expression)

}
}

关于mysql - Spring JpaRepository findBy...In(Collection) 返回并集而不是交集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47527594/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com