Java 如何使用Spring通过多个可选条件和一对一关系进行查找
我试图通过使用QueryDsl来解决这个问题,但我在这个问题中问到它不起作用 问题是我有两张桌子一个人和他的衣服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
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)));
这是你的课这是你的课