@JoinFetch ничего не делает (EclipseLink)

У меня есть сущность Base с отношением "многие к одному" с вложенной сущностью. Я хочу заказать запрос по Nested.name, где name может быть нулевым. Даже если имя равно нулю, я хочу, чтобы запрос вернул эту строку. Поэтому я пытаюсь заставить EclipseLink генерировать запросы, которые LEFT JOIN объединяет их вместе, вместо того, чтобы выбирать из обеих таблиц.

Я аннотировал отношения между 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.

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

Спасибо


person Jonatan    schedule 20.12.2011    source источник


Ответы (1)


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

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

person James    schedule 20.12.2011
comment
В основном код делает Join<Object, Object> join = queryRoot.join("nested", JoinType.LEFT); query.orderBy(criteriaBuilder.asc(join.get("name"))); - person Jonatan; 21.12.2011
comment
Проблема заключалась в том, что я сначала выполнил queryRoot.get("nested"), а затем queryRoot.join..., что, по-видимому, заставило первый get указать соединение как INNER. Спасибо, что указали мне правильное направление! - person Jonatan; 21.12.2011