Я хочу выполнить ЛЕВОЕ ВНЕШНЕЕ ОБЪЕДИНЕНИЕ между двумя таблицами с помощью Критериев API. Все, что я мог найти в Быть в спящем режиме документации, является этим методом:
Criteria criteria = this.crudService
.initializeCriteria(Applicant.class)
.setFetchMode("products", FetchMode.JOIN)
.createAlias("products", "product");
Однако это или выполняет внутреннее объединение или правильное внешнее объединение из-за количества результатов, которые оно возвращает.
Я также хочу, чтобы мое соединение было Лениво. Как я могу сделать это?
Удачи!
ОБНОВЛЕНИЕ: кажется, что использование псевдонимов делает ВНУТРЕННЕЕ ОБЪЕДИНЕНИЕ соединения автоматически. Существует что-то в "фоновой истории", я еще не схватил. Так, никакой псевдоним сегодня. Это оставляет меня с проблемой введения ограничений на эти две таблицы, потому что у них обоих есть столбец (или свойство, если это является более соответствующим), 'имя'.
Если вам нужно оставить присоединиться к таблице продуктов, просто сделайте:
.....createAlias("продукты", "product", Criteria.LEFT_JOIN);
Соединение находится в запросе SQL. Нельзя лениться.
В Hibernate для ленивого извлечения этих данных просто исключите их из запроса HQL. Затем, когда вы обращаетесь к геттерам вашей сущности (если ваш сеанс все еще открыт), он будет загружен автоматически (вам не нужно писать эту часть запроса).