java Querydsl与or()的错误结果

问题描述 投票:0回答:1

我是querydsl的新手,我可能会以某种方式错过这个概念。我想要做的是获取所有人物,谁的名字以“他”开头,或者谁的生日已经过去,或者谁的地址'街道以“ge”开头。

当我在这里使用片段时,我只获得符合第三个条件的人物对象(person.adresse.strasse)。第一个zwo条件完全被忽略。如果我注释掉第三个条件,我会得到两个第一个条件(person.name machtes或person.birthday.before)匹配的结果。

我究竟做错了什么?我是否必须加入?

List<Person> persons = query.select( person )
            .from( person )
            .where(
                    person.name.startsWith( "He" )
                    .or( person.birthday.before( new Date( System.currentTimeMillis() ) )
                            .or( person.adresse.strasse.startsWithIgnoreCase( "ge" ) ) )
            )
            .fetch();
java querydsl
1个回答
0
投票

您的括号数量错误。

无意中,你已经将第三个or嵌套在第二个中,这就是为什么当你评论第三个or时你会得到正确的结果。

试试这个:

List<Person> persons = query.select( person )
            .from( person )
            .where(
                    person.name.startsWith("He")
                    .or(person.birthday.before(new Date(System.currentTimeMillis())))
                    .or(person.adresse.strasse.startsWithIgnoreCase("ge")) 
            )
            .fetch();

它应该工作。

© www.soinside.com 2019 - 2024. All rights reserved.