(Ленивое) ЛЕВОЕ ВНЕШНЕЕ ОБЪЕДИНЕНИЕ с помощью Быть в спящем режиме Критериев API

Я хочу выполнить ЛЕВОЕ ВНЕШНЕЕ ОБЪЕДИНЕНИЕ между двумя таблицами с помощью Критериев API. Все, что я мог найти в Быть в спящем режиме документации, является этим методом:

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

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

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

Удачи!

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

22
задан Mikko Maunu 18 August 2013 в 17:24
поделиться

2 ответа

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

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

36
ответ дан 29 November 2019 в 03:53
поделиться

Соединение находится в запросе SQL. Нельзя лениться.


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

0
ответ дан 29 November 2019 в 03:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: