FetchType может быть установлен программно с использованием fetchProfiles
например: Учтите, что существует класс Employee, и у него есть два дочерних класса. Профили Address и Department Fetch для них можно задать в классе Employee.
@FetchProfiles({ @FetchProfile(name = "emp_address", fetchOverrides = { @FetchProfile.FetchOverride(entity = Employee.class, association = "addresses", mode = FetchMode.JOIN) }), @FetchProfile(name = "emp_department", fetchOverrides = { @FetchProfile.FetchOverride(entity = Employee.class, association = "departments", mode = FetchMode.JOIN) })}) public class Employee {
@OneToMany(mappedBy = "employee", cascade = CascadeType.ALL, fetch = FetchType.LAZY) private Set addresses;
@OneToMany(mappedBy = "employee", cascade = CascadeType.ALL, fetch = FetchType.LAZY) private Set departments; }
Вы можете включить fetchprofile при получении записи Сотрудника.Если профиль извлечения включен, то дочерние объекты охотно выбираются, потому что вы выполняете объединение
session.enableFetchProfile("emp_address");
session.enableFetchProfile("emp_department");
Criteria criteria = session.createCriteria(Employee.class);
criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
List employees = criteria.list();