我有以下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数据用来对结果进行分页的第一个查询。
查询看起来没问题。很可能会得到错误的结果,因为基于隐式属性的联接使联接成为内部联接。
使用左联接可以得到所需的结果。
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语句,如下所示-
2013年,根据@Timo Westkämper(参见QueryDSL-Add subquery into FROM语句),可以在FROM子句中包含子查询。现在看来这已经不可能了,因为JPQL规范不允许这样做: (https://docs.oracle.com/cd/e12839_01/apirefs.1111/e13946/ejb3_langref.html#ejb3_langref_subqu