У меня есть сущность Base, с отношением «много-к-одному» к сущности, вложенной. Я хочу заказать запрос по Nested.name, где имя может быть нулевым. Даже если имя равно null, я хочу, чтобы запрос возвращал эту строку. Поэтому я пытаюсь заставить EclipseLink генерировать запросы, которые LEFT JOINs вместе, вместо того, чтобы выбирать из обеих таблиц.@JoinFetch ничего не делает (EclipseLink)
Я аннотированный связь между базой и вложенными с @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...
Я использую JPA 2.0 Criteria API для создания и выполнения запросов. Даже если я явно создаю объединенный запрос с использованием API критериев, результирующий запрос будет выглядеть как первый, без объединений. Явное присоединение при построении запроса, похоже, отлично работает с Hibernate, но не влияет на результирующий запрос в EclipseLink.
У меня, вероятно, отсутствует что-то основное здесь, поэтому любые советы приветствуются.
Благодаря
В основном то, что делает код, это «Присоединить
Проблема заключалась в том, что я сначала выполнил' queryRoot.get ("вложенные") ', а затем' queryRoot.join ... ' , что, по-видимому, вызвало первое «получить», чтобы указать соединение как соединение INNER. Спасибо, что указал мне в правильном направлении! – Jonatan