2017-02-18 20 views
0

我有一個RequestMaping,它將一個搜索json類作爲body params。 我想創建此搜索JSON對象適當的規範,這樣傳遞給我的信息庫這樣的:如何將Json對象映射到用於搜索查詢的JPA規範

pagesResult = myRepository.findAll(mySpec) 

我已經problme與解析和動態添加項目規範。我想實現這樣的事情:

@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'不是'規格'?這是一種方法,而不是「添加」。 – ByeBye

+0

感謝您的回答,但它不起作用。檢查地雷。 – Kenji