我正在为给定场景寻找规范的替代方案

I am looking for an alternative to Specifications for the given scenario

我调用 JpaRepository 的 findall() 方法如下

服务

on.findall(specificationsbuilder.getspecifications(params), paegable obj)  

specificationsbuilder.getspecifications(param)

returns 规格

我的问题是,如果 specifications 为空,我将 findall(specifications,paegable) 工作

阅读此处:https://jira.spring.io/browse/DATAJPA-121,截至最新 spring 数据 jpa,如果您的参数为 null,查询将自动形成为 null。

此外,由于 Spring data jpa 2.0,spring 现在支持 @Nullable 注释。这有助于处理传递的空参数。

@Nullable – 用于可以为 null 的参数或 return 值。

如果该值为空,它将自动 return 为真,如果不为空,它将在 table.

中搜索该值

根据 sourcecode of SimpleJpaRepository 它应该可以工作,因为 @Nullable 说它会接受 null:

@Override
    public Page<T> findAll(@Nullable Specification<T> spec, Pageable pageable) {

        TypedQuery<T> query = getQuery(spec, pageable);
        return isUnpaged(pageable) ? new PageImpl<T>(query.getResultList())
                : readPage(query, getDomainClass(), pageable, spec);
}