我正在实现一个Repository,它实现了QuerydslBinderCustomizer,以帮助从url过滤器参数创建Predicates . 就是这样

@NoRepositoryBean
public interface TableRepository<T extends TableEntity, S extends EntityPathBase<T>> extends PagingAndSortingRepository<T, UUID>, QuerydslPredicateExecutor<T>, QuerydslBinderCustomizer<S> {
    @Override
    default void customize(@NonNull QuerydslBindings bindings, @NonNull S root) {
        bindings.bind(String.class).all((MultiValueBinding<StringPath, String>) (path, values) -> {
            BooleanBuilder predicate = new BooleanBuilder();
            values.forEach(value -> predicate.or(path.containsIgnoreCase(value)));
            return Optional.of(predicate);
        });
    }
}

我的个体实体存储库正在从此扩展,

public interface UserRepository extends TableRepository<User, QUser> {
}

这会产生一个 endpoints http://localhost:port/users . 事情很好,我可以提出 http://localhost:port/users?name="somename" 等请求 .

现在,我正在实现软删除,我不想在查询时返回软删除的记录 . 我打算为此编辑 customize 方法

default void customize(@NonNull QuerydslBindings bindings, @NonNull S root) {
        bindings.bind(String.class).all((MultiValueBinding<StringPath, String>) (path, values) -> {
            BooleanBuilder predicate = new BooleanBuilder();
            values.forEach(value -> predicate.or(path.containsIgnoreCase(value)));
            // If path does not have delete flag, add deleted=false to the predicate
            return Optional.of(predicate);
        });
    }

但是,在没有任何参数(即 http://localhost:port/users )的情况下对 endpoints 进行调用时会出现问题 . 在这种情况下 bindings.bind() 被执行但 BooleanBuilder predicate = new BooleanBuilder(); 部分不执行 . 因此,我无法添加所需的谓词来过滤掉软删除的记录 . 如何进行?

我可能正在以错误的方式过滤删除的记录 . 还有更好的选择吗?

EDIT: 根据要求,我正在链接一个基本的存储库https://github.com/SayakMukhopadhyay/demo-querydsl