@JoinFetch ничего не делает (EclipseLink) - PullRequest
4 голосов
/ 20 декабря 2011

У меня есть сущность Base с отношением многие-к-одному к сущности Nested. Я хочу заказать запрос по Nested.name, где имя может быть нулевым. Даже если name равно null, я хочу, чтобы запрос возвратил эту строку. Поэтому я пытаюсь заставить EclipseLink генерировать запросы, которые ЛЕВЫЕ СОЕДИНЯЮТ, а не выбирать из обеих таблиц.

Я аннотировал отношения между Base и Nested с помощью аннотации @JoinFetch следующим образом:

@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "BASE_ID")
@JoinFetch(value = JoinFetchType.OUTER)
private Nested nested;

Однако это, похоже, никак не влияет на запросы, сгенерированные EclipseLink. Фактически сгенерированный запрос

SELECT ... FROM BASE t0, NESTED t1 WHERE (t1.ID = t0.BASE_ID) ORDER BY t1.NAME ASC...

пока я ожидаю что-то вроде

SELECT ... FROM BASE t0 LEFT JOIN NESTED t1 ON (t1.ID = t0.BASE_ID) ORDER BY t1.NAME ASC...

Я использую API критериев JPA 2.0 для построения и выполнения запросов. Даже если я явно создаю объединенный запрос с использованием API критериев, результирующий запрос будет выглядеть как первый, без объединений. Явное объединение при построении запроса, кажется, работает нормально с Hibernate, но не влияет на результирующий запрос в EclipseLink.

Я, вероятно, здесь упускаю что-то простое, поэтому любые советы приветствуются.

Спасибо

1 Ответ

2 голосов
/ 20 декабря 2011

Я думаю, что проблема в вашем orderBy (который не использует внешнее соединение, поэтому аннулирует внешнее соединение извлечения).

Как вы устанавливаете порядок?Вы используете для этого внешнее соединение?

...