2017-02-18 11 views
0

Search jsonクラスをbody paramsとして取得するRequestMapingがあります。Jsonオブジェクトを検索クエリのJPA仕様にマップする方法

pagesResult = myRepository.findAll(mySpec) 

私は構文解析でproblmeと動的仕様に項目を追加している: は、私はこのように私のリポジトリに渡すように、この検索JSONオブジェクトから適切な仕様書を作成したいです。私はこのような何かを達成したい:

@Override 
    public Phones searchPhones(int pageNumber, Map<String, String> searchObject) { 

     List<PhoneSpecification> specificationslist = new ArrayList<>(); 

     generateSpecifications(searchObject, specificationslist); //fill specificationList 

     Specification<Phone> specificationOfPhone; 
     for (PhoneSpecification spec : 
       specificationslist) { 

      //this is my problem , I had to dynamically increase my Specification like this: 
      specificationOfPhone = specificationOfPhone + Specifications.and(spec); 

     } 

mobileRepository.findAll(specificationOfPhone); 

答えて

1

if(specificationslist.size()>0){ 
      finalSpecification = Specifications.where(specificationslist.get(0)) ; 
     } 

     for (int i=1 ; i<specificationslist.size(); i++) { 
      finalSpecification = Specifications.where(finalSpecification).and(specificationslist.get(i)); 
     } 
1

あなたは、このようにコードを変更することができます。

Specifications<Phone> specificationOfPhone = Specifications.where(null); 
for (PhoneSpecification spec : specificationslist) { 
    specificationOfPhone = specificationOfPhone.and(spec); 
} 

私はPhoneSpecificationが拡張されることを想定/ Specification<T>を実装しています。

Specifications.where(null);は、他と連鎖可能な空の指定を返します。

Specifications<T>Specification<T>になるので、findAllメソッドで使用できます。私は最終的に最初の仕様にどこ追加することでこれを実現し、すべてこのように追加することで対処

+0

specification.addための方法は(ありません) – Kenji

+0

あなたは、私が 'Specifications'にそれを変更していることがわかりますか'Specification'ではなく?これは「追加」ではなく「と」の方法です。 – ByeBye

+0

あなたの答えに感謝しますが、うまくいきません。鉱山を確認してください。 – Kenji

関連する問題