我使用Spring引导弹簧数据,特别是扩展CrudRepository的PagingAndSortingRepository类。
我需要一个返回表的所有条目的查询,如果匹配四个列表中的任何一个,当它为null(或为空)时忽略它。
如果我使用findByTypeInAndLocaleInAndCategoryInAndTagIn并且其中一个列表为空,则结果也为空。所以我最终写了几个查找器,并根据哪个列表是空的使用不同的。
是否可以将其组合在一个探测器中?
所以,例如如果我使用findByTypeAndLocale,如果列表类型为空,我想匹配所有类型的值。
对任何提示感到高兴。
@Repository
public interface FeedRepository extends PagingAndSortingRepository<FeedEntry, Long>, JpaSpecificationExecutor<FeedEntry> {
public List<FeedEntry> findByGuid(String guid);
public Page<FeedEntry> findAll(Pageable pageable);
public Page<FeedEntry> findByLocale(List<LocaleEnum> type, Pageable pageable);
public Page<FeedEntry> findByType(List<FeedTypeEnum> type, Pageable pageable);
public Page<FeedEntry> findByTypeAndLocale(FeedTypeEnum type, LocaleEnum locale, Pageable pageable);
public Page<FeedEntry> findByTypeInAndLocaleIn(List<FeedTypeEnum> type,List<LocaleEnum> locale, Pageable pageable);
public Page<FeedEntry> findByTypeInAndLocaleInAndCategoryIn(List<FeedTypeEnum> type,List<LocaleEnum> locale, List<String> category, Pageable pageable);
public Page<FeedEntry> findByTypeInAndLocaleInAndTagIn(List<FeedTypeEnum> type,List<LocaleEnum> locale, List<String> tag, Pageable pageable);
public Page<FeedEntry> findByTypeInAndLocaleInAndCategoryInAndTagIn(List<FeedTypeEnum> type,List<LocaleEnum> locale, List<String> category, List<String> tag, Pageable pageable);
}
答案 0 :(得分:1)
你无法做到这一点。如果列表为空,则表示没有任何与您的条件查询匹配的值。
要执行您要查找的内容,您需要使用与QBE
Query By example
(CrudRepository
)来执行此操作
为什么呢?你需要一个动态查询,正如文档所说:
按示例查询(QBE)是一种用户友好的查询技术 简单的界面。它允许动态查询创建,但不允许 要求编写包含字段名称的查询。实际上,查询依据 示例不需要使用特定于商店的查询来编写查询 完全是语言。
doc的一个例子:
public interface PersonRepository extends JpaRepository<Person, String> { … }
public class PersonService {
@Autowired PersonRepository personRepository;
public List<Person> findPeople(Person probe) {
return personRepository.findAll(Example.of(probe));
}
}
**为你的案例做例子......
答案 1 :(得分:1)
我担心此刻不可能。
恕我直言,实现目标的最佳方法是使用Spring Data JPA规范(http://docs.spring.io/spring-data/jpa/docs/1.10.2.RELEASE/reference/html/#specifications)并手动检查每个参数是否为空值...