0

我有一个过滤器要搜索 - 用户名以及两个开始和结束日期。如何使用存储库选择这些字段?

@Service
public class ResolutionServiceDefault implements ResolutionService {
    @Autowired
    private ResolutionRepository resolutionRepository;

    @Override
    public List<Resolution> findAllFilter(String user, Date start, Date end) {
        if(user!=null)...
        if(start!=null)...
        if(end!=null)...
        //perform a query on the fields that are not null
        return .....;
    }
}

@Repository
public interface ResolutionRepository extends JpaRepository<Resolution, Long> {
    List<Resolution> findAllByStatus(int status);
    List<Resolution> findAll();//String user, Date start, Date end
}
4

1 回答 1

0

我会使用规范,例如:

 @Override
 public List<Resolution> findAllFilter(String user, Date start, Date end) {

    Specification<Account> specification = new Specification<Account>() {
        public Predicate toPredicate(Root<Account> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
            List<Predicate> predicates = new ArrayList<Predicate>();
        if(user!=null) {
            predicates.add(root.get("user").equals(user));
        } 
        if(start!=null) {
            predicates.add(root.get("start").equals(start));
        } 
        if(end!=null) {
            predicates.add(root.get("end").equals(end));
        } 
        return builder.and(predicates.toArray(new Predicate[predicates.size()]));
    };
    return repository.findAll(specification);
}

您的存储库将需要如下所示:

@Repository
public interface ResolutionRepository extends JpaRepository<Resolution, Long>, JpaSpecificationExecutor<Resolution> {
}
于 2016-11-11T12:50:55.490 回答