Как заставить JPA использовать внешнее соединение при условии, связанном с ассоциированным объектом? - PullRequest
0 голосов
/ 06 апреля 2011

У меня есть две сущности 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 Ответ

1 голос
/ 06 апреля 2011

Вы можете иметь внешнее объединение в JPQL, как и в SQL, через ключевые слова LEFT [OUTER] JOIN. Справочник по языку JPQL имеет довольно хороший пример этого.

В произвольном порядке готовый JPQL будет выглядеть примерно так:

select t
from Task t left outer join t.taskSchedule ts
where t.description like '%text%' or ts.name like '%text%'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...