Подтвердить что ты не робот

(Lazy) LEFT OUTER JOIN, используя API-интерфейс Hibernate Criteria

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

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

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

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

Ура!

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

Ответ 3

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


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