我有以下查询:
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;
...
}
问题是:
每个Customer
可能同时为Person
OR a Company
,但不。
这意味着其中一个实体将始终为空。
使用我编写的查询,它只会在两个实体都不为空时获取结果,这是我没想到的行为。
有人知道如何创建在Person.name
为空时搜索Company.name
的查询,并在Company.name
为空时搜索Person.name
吗?
我可以创建2个单独的查询,但我只是在一个查询中尝试执行spring-data-jpa分页。
答案 0 :(得分:2)
使用明确的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 '!'