簡體   English   中英

如何使用Spring通過多個可選標准和OneToMany關系查找

[英]how to find by multiple optional criteria and a OneToMany relationship using Spring

我試圖通過使用QueryDsl解決這個問題,但它不起作用我在這個問題中詢問Spring數據和QueryDsl,如何通過一行中的多個條件和OneToMany關系查找

問題是我有兩張桌子和一件衣服。

PersonID |PersonFirstname|PersonLastname
========================================
1        |Jack           |      Jackson  
2        |Kelly          |      Kellson

然后人員表可以是(OneToMany by PersonId)

ID | PersonID | Jacket | Color | Size
========================================
1  |1         |Nike    | black | XL  
2  |1         |ADIDAS  | white | XL
3  |1         |Prada   | green | L  
4  |1         |ADIDAS  | blue  | XL

5  |2         |Reebock | yellow| S 
6  |2         |Majestic| brown | XS
7  |2         |Prada   | green | M 

從我的另一個問題:如果我現在寫這樣的查詢

 findPersonWho.and(person.personClothes.any().jacket.eq("Nike") .and(person.personClothes.any().color.eq("black")) .and(person.personClothes.any().size.eq("L"))); 

它將返回ID為1的人,因為他有一件來自耐克的夾克,黑色和大小為L.

但我只想要患者1,如果他有來自耐克的夾克,顏色為黑色,大小為L.

現在我嘗試以另一種方式做到這一點,我寫了一個新方法,只在這樣的衣服表中搜索

if (jacket != null) {
        findPerson.and(p.jacket.eq("Nike").and(p.ecolor.eq("black").and(p.size.eq(L))));
}

這樣可行,但是如果我現在想要使用BooleanBuilder來查找此表中的多個條件,就像更多來自Reebock的夾克的人一樣,顏色為黃色,大小如下:

if (jacket1 != null) {
        findPerson.and(p.jacket.eq("Nike").and(p.ecolor.eq("black").and(p.size.eq(L))));
}
if (jacket2 != null {
        findPerson.and(p.jacket.eq("Reebock").and(p.ecolor.eq("yellow").and(p.size.eq(S))));

這將返回0,但事實上,有兩個匹配。 但我認為他現在正在搜索ID,而不是PationID。 所以沒有ID 1與展位匹配..

有沒有辦法進行此搜索? 也許用另一種方法?

嘗試關注並將搜索替換為您要搜索的內容

Criteria person = sf.getCurrentSession().createCriteria(Person.class).createAlias("personId", "personId");

person.add(Restrictions.disjunction().add(Restrictions.ilike("PersonFirstname",Search,MatchMode.ANYWHERE))
.add(Restrictions.ilike("personId.Jacket",Search,MatchMode.ANYWHERE))
.add(Restrictions.ilike("personId.Color",Search,MatchMode.ANYWHERE))
.add(Restrictions.ilike("personId.Size",Search,MatchMode.ANYWHERE)));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM