gpt4 book ai didi

java - 带有空对象的 JPA 查询

转载 作者:行者123 更新时间:2023-11-30 09:14:57 25 4
gpt4 key购买 nike

我有以下查询:

Query query1 = getEntityManager().createQuery(
" select o from Customer o " +
" where lower(o.person.name) like :name escape '!' " +
" or lower(o.company.name) like :name escape '!'");

我的映射是:

@Entity
public class Customer extends AbstractBaseEntity {

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

@OneToOne(optional = true, cascade = CascadeType.ALL)
private Person person;
...
}

问题是:每个客户可以是一个一个公司,但不能同时时间。这意味着这些实体之一将始终为空。

对于我编写的查询,它只会在两个实体都不为空时获取结果,这是我没有预料到的行为。

有谁知道当 Company.name 为 null 时如何创建搜索 Person.name 的查询并搜索 Company.namePerson.name 为空时?

我可以进行 2 个单独的查询,但我试图在一个查询中完成所有操作以执行 spring-data-jpa 分页。

最佳答案

为此使用显式 LEFT JOIN:

SELECT cu from Customer cu  
LEFT JOIN cu.person p
LEFT JOIN cu.company co
where lower(p.name) like :name escape '!'
or lower(co.name) like :name escape '!'

关于java - 带有空对象的 JPA 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20166627/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com