У меня есть сущность 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.
Я, вероятно, здесь упускаю что-то простое, поэтому любые советы приветствуются.
Спасибо