带有null对象的JPA Query

时间:2013-11-23 19:10:48

标签: java sql jpa

我有以下查询:

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分页。

1 个答案:

答案 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 '!'