[英]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.