当前位置: 首页 > 知识库问答 >
问题:

QueryDsl-或语句不工作

柳奇思
2023-03-14

我有以下QueryDSL查询:

    QCustomer customer = QCustomer.customer;

    BooleanBuilder builder = new BooleanBuilder();
    builder.or(customer.person.name.containsIgnoreCase(query));
    builder.or(customer.company.name.containsIgnoreCase(query));

    return builder;
@OneToOne(orphanRemoval = false, optional = true, cascade = CascadeType.ALL)
private Company company;

@OneToOne(orphanRemoval = false, optional = true, cascade = CascadeType.ALL)
private Person person;
select o 
from Customer 
where o.person.name like '%:name%' or o.company.name like '%:name%'
select 
    count(customer0_.uid) as col_0_0_ 
from 
    Customer customer0_ 
cross join 
    Person person1_ 
cross join 
    Company company2_ 
where 
    customer0_.person_uid=person1_.uid 
    and customer0_.company_uid = company2_.uid 
    and (lower(person1_.name) like ? escape '!' or lower(company2_.name) like ? escape '!') limit ?

它使用计数,因为这是Spring数据用来对结果进行分页的第一个查询。

共有1个答案

商骞仕
2023-03-14

查询看起来没问题。很可能会得到错误的结果,因为基于隐式属性的联接使联接成为内部联接。

使用左联接可以得到所需的结果。

QPerson person = QPerson.person;
QCompany company = QCompany.company;
BooleanBuilder builder = new BooleanBuilder();
builder.or(person.name.containsIgnoreCase(str));
builder.or(company.name.containsIgnoreCase(str));

query.from(customer)
     .leftJoin(customer.person, person)
     .leftJoin(customer.company, company)
     .where(builder);
 类似资料:
  • 我刚刚开始学习python,通过《像计算机科学家一样思考》这本书,我陷入了一些语言语法。 当我使用一些输入(比如7)运行此程序时,会收到如下错误消息: 为什么if语句不能正常工作?即使输入值小于20,它仍会进入第一个if语句

  • 我正在解决一个使用QueryDSL构造查询语句的java应用程序的性能问题。在与DBA合作后,有人建议我在查询中添加以下语句: 当前,我们正在执行查询,如下所示: 提前道谢。

  • 我用语句编写了这段代码,它运行良好: 但当我试图用PreparedStatement转换它时,它却不能处理SQL语法错误。

  • 我正在创建一个基于文本的游戏,并询问性别。但我的else语句似乎不起作用。 打印性别

  • 在使用querydsl时,我遇到了一个问题,需要生成一个case语句,其中包含不同数量的when/then语句和一个最终的else表达式。 正如这里所描述的,我已经能够轻松地生成带有固定数量的when/then语句的case语句,如下所示-

  • 问题内容: 以下工作-拒付金额等于1时返回Y,否则默认为N 但是我似乎无法使这一工作正常?语法有效吗 问题答案: 大概这可以工作: