0

検索するフィルタがあります - ユーザー名と2つの開始日と終了日。リポジトリを使用してこれらのフィールドを選択するにはどうすればよいですか?異なる数のパラメータを持つスプリングレポジトリを使用してデータベースからselectを作成するにはどうすればよいですか?

@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 
} 

答えて

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> { 
} 
+1

root.get( "ユーザー")イコール(ユーザー)戻り値はブール値で、述部配列predicates.add(root.get( "user")。equals(user))には追加できません。 – user5620472

関連する問題