Управление сгенерированным вложенным выбором Hibernate - PullRequest
1 голос
/ 22 января 2010

Рассмотрим следующие три спящих объекта:

public class Car {

  @OneToMany(fetch = FetchType.LAZY)
  @Fetch(FetchMode.SUBSELECT)
  private List<Wheel> wheels;

}

public class Wheel {

  @OneToOne(fetch = FetchType.LAZY)
  private Hubcap hubcap;

}

public class Hubcap {

}

Рассмотрим следующие критерии:

Criteria criteria = getSession().createCriteria(Car.class);
List<Car> cars = criteria.list();

for (Car car : cars) {
  Hibernate.initialize(car.getWheels());
}

Есть ли способ управления запросом на выборку, который будет сгенерирован? В частности, я хотел бы присоединиться к подэлементу, чтобы колпаки также выбирались при извлечении колес. Это, конечно, может быть достигнуто путем изменения FetchType на EAGER, но мне нужно что-то более специальное - по запросу для каждого запроса.

Поскольку код в настоящее время нужен, мне нужно сгенерировать еще один выбор, чтобы получить Hubcaps.

Ответы [ 3 ]

0 голосов
/ 25 января 2010

Вы можете изменить тип выборки в запросе критерия с помощью метода setFetchMode.

http://docs.jboss.org/hibernate/core/3.3/reference/en/html/querycriteria.html

0 голосов
/ 29 июля 2010

После многих исследований выяснилось, что на данном этапе это невозможно, по крайней мере, без расширения Hibernate.

0 голосов
/ 22 января 2010

Да, вы можете сделать это, используя критерии, но я не помню, как это было сделано, просто ищите объединения в критериях, однако я бы предложил использовать HQL, а критерии гораздо более читабельны:

select c 
from Car c join fetch c.wheels
where ...
...