2017-04-18 154 views
1

我有一個域對象Item: 項目領域:在現實中abc 它有很多更多的字段。搜索與Spring數據JPA

我知道我可以創建類似的方法:

  • findByAAndB(...)

  • 在我的自定義查找方法
  • 使用@Query(SELECT ... WHERE ...)

但我仍然不知道是否有更好的解決方案:考慮到我可能有一堆字段需要同時查詢,最簡單的方法是查詢items表?

如果我有一個如下所示的方法,有沒有一種方法可以自動將字段!= null映射爲SELECT

  • findBy(Item prototype)
+0

林不知道我理解你的問題,但這個環節一定會幫助https://docs.spring.io/spring-data/jpa/docs/current/reference /html/#jpa.query-methods.query-creation IsNotNull,NotNull findByAge(Is)NotNull – ketrox

+0

假設我的Item有100個字段。文檔的表4中的關鍵字允許我編寫一個方法,我必須迭代所有字段並將它們填入方法名稱findByAAndBAndCAndDAndE ... AndXAndYAndZ(...)。當你處理很多領域時,這對我來說並不是一個很好的方式。我想知道是否有一種方法可以自動裝載我的「Item」中的所有字段(它們已經在類中定義,也許有一種方法我不必重複自己)。 – hansi

+1

https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#query-by-example也許這就是我認爲這正是你需要的 – ketrox

回答

1
public class Item{ 
     String a,b,c; 
    } 


    Item item=new Item(); 
    item.setA("a"); 
    Example<Item> itemExample=ExampleOf(item); 
    List<Item> res=itemRepository.findAll(example); 

來源:Query By Example

0

您可以創建實體管理器自定義查詢,並創建動態查詢。爲此,您必須定義所有變量,默認值爲-1,您必須在查詢中使用該變量,然後獲取全部變量ache檢查,然後如果將add變量更改爲查詢並執行它,則值將更改或不更改。

ex。

StringBuilder tempQuery = new StringBuilder("select " + select + " FROM 
Area area "); 

    // cityId 
    if (cityId != -1) { 
     tempQuery.append(" and "); 
     tempQuery.append(" area.FCity.cityId = :cityId "); 
    } 
    // rId 
    if (rId != -1) { 
     tempQuery.append(" and "); 
     tempQuery.append(" area.FRestaurantCenter.FRestaurant = :rId "); 
    } 

    return tempQuery.toString(); 
+0

查看上面的評論,我想知道是否有辦法讓我避免寫這樣的樣板代碼。畢竟這是我使用Spring的原因之一。 – hansi