Java 如何使用Spring通过多个可选条件和一对一关系进行查找

Java 如何使用Spring通过多个可选条件和一对一关系进行查找,java,spring,spring-data,spring-data-jpa,querydsl,Java,Spring,Spring Data,Spring Data Jpa,Querydsl,我试图通过使用QueryDsl来解决这个问题,但我在这个问题中问到它不起作用 问题是我有两张桌子一个人和他的衣服 PersonID |PersonFirstname|PersonLastname ======================================== 1 |Jack | Jackson 2 |Kelly | Kellson 那么Person表可以是(PersonId的OneToM

我试图通过使用QueryDsl来解决这个问题,但我在这个问题中问到它不起作用

问题是我有两张桌子一个人和他的衣服

PersonID |PersonFirstname|PersonLastname
========================================
1        |Jack           |      Jackson  
2        |Kelly          |      Kellson
那么Person表可以是(PersonId的OneToMany)

从我的另一个问题: 如果我现在写一个这样的查询

findPersonWho.and(person.personClothes.any().jacket.eq("Nike")
                .and(person.personClothes.any().color.eq("black"))
                .and(person.personClothes.any().size.eq("L"))); 
if (jacket != null) {
        findPerson.and(p.jacket.eq("Nike").and(p.ecolor.eq("black").and(p.size.eq(L))));
}
它将返回ID为1的人,因为他有一件来自 nike和黑色a码和L码

但我只想要病人1,如果他有一件耐克的夹克,颜色是 黑色和L码

现在我试着用另一种方法来做这件事,我写了一个新方法,只在衣服表中搜索,如下所示

findPersonWho.and(person.personClothes.any().jacket.eq("Nike")
                .and(person.personClothes.any().color.eq("black"))
                .and(person.personClothes.any().size.eq("L"))); 
if (jacket != null) {
        findPerson.and(p.jacket.eq("Nike").and(p.ecolor.eq("black").and(p.size.eq(L))));
}
这是可行的,但如果我现在想使用BooleanBuilder在这个表中通过多个标准查找,比如某个穿着Reebock夹克的人,颜色为黄色,尺寸为s,如下所示:

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 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)));

尝试以下操作,并用您想要搜索的内容替换搜索

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)));

这是你的课这是你的课