(Ленивый) ВЛЕВО НАРУЖНОЕ СОЕДИНЕНИЕ, используя Hibernate Criteria API - PullRequest
22 голосов
/ 05 февраля 2010

Я хочу выполнить LEFT OUTER JOIN между двумя таблицами, используя Criteria API. Все, что я мог найти в документации по Hibernate, это метод:

Criteria criteria = this.crudService
            .initializeCriteria(Applicant.class)
            .setFetchMode("products", FetchMode.JOIN)
            .createAlias("products", "product");

Однако из-за количества возвращаемых результатов выполняется либо внутреннее, либо правое внешнее соединение.

Я также хочу, чтобы мое присоединение было ленивым. Как я могу это сделать?

Ура!

ОБНОВЛЕНИЕ: Кажется, что использование псевдонимов автоматически делает INNER JOIN объединения. Что-то в «предыстории» я еще не уловил. Итак, сегодня нет псевдонима. Это оставляет меня с проблемой применения ограничений к двум таблицам, потому что они обе имеют столбец (или свойство, если это более уместно) ' name '.

Ответы [ 3 ]

36 голосов
/ 06 февраля 2010

Если вам нужно присоединиться к таблице продуктов, просто сделайте:

..... createAlias ​​( "продукты", "product", Criteria.LEFT_JOIN);

23 голосов
/ 28 февраля 2015

API ответа Sdavids теперь deprecated. Его обновленная версия

.... createAlias ​​("employee", "emp", JoinType.LEFT_OUTER_JOIN)

0 голосов
/ 05 февраля 2010

Объединение в запросе SQL. Это не может быть ленивым.


С Hibernate, чтобы лениво получать эти данные, просто исключите их из запроса HQL. Затем, когда вы получаете доступ к получателям вашей сущности (если ваша Сессия все еще открыта), она будет загружена автоматически (вам не нужно писать эту часть запроса).

...