如何让JPA在涉及关联实体的条件下使用外连接?

时间:2011-04-06 02:49:03

标签: java jpql

我有两个JPA实体:

@Entity
public class TaskSchedule {
    ...
    private String name;
    ...
}

@Entity
public class Task {
    ...
    private String description;

    @ManyToOne
    private TaskSchedule taskSchedule;
    ...
}

我想要一个如下所示的查询:

select t
from Task t
where t.description like '%text%' or t.taskSchedule.name like '%text%'

并非所有任务都有TaskSchedule。上面的JPQL查询在生成的SQL中生成一个内部联接,它排除了没有TaskSchedule的所有任务。

如何告诉JPA在生成的SQL中执行外连接?

我使用Hibernate EntityManager作为JPA实现。

谢谢, 戴夫

1 个答案:

答案 0 :(得分:1)

您可以像在SQL中一样通过LEFT [OUTER] JOIN关键字在JPQL中建立外部联接。 JPQL Language Reference就是一个非常好的例子。

Freehanding this,完成的JPQL可能看起来类似于:

select t
from Task t left outer join t.taskSchedule ts
where t.description like '%text%' or ts.name like '%text%'