Я использую критерии для выбора списка объектов, которые имеют поле, относящееся к другим таблицам, поэтому я использую псевдонимы. Проблема в том, что когда я пытаюсь получить доступ к объединенному полю, hibernate выполняет другой выбор в базе данных. Это действительно неэффективно, так как это предварительно формирует один запрос для каждой строки результата.Критерий спящего режима для доступа к объединенным полям
Может ли кто-нибудь сказать мне, почему это происходит?
использование критериев (уменьшенная только соответствующие строки)
List<Country> list = session.createCriteria(Country.class)
.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY)
.createAlias("locations", "location")
.list();
for (Countries cntry : list){
cntry.getLocations().size(); // here hibernate execute another query
}
Страна (важная часть)
@Entity
public class Country {
// other fields as uuid etc.
@OneToMany(fetch = FetchType.LAZY, mappedBy = "country")
private List<Location> locations;
// getters and setters
}
Расположение (важная часть)
@Entity
public class Location {
// other fields as uuid etc.
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "COUNTRY_UUID")
private Country country;
// getters and setters
}
Запрос включал все поля всех связанных таблиц, но выглядит, что эти поля не установлены. Настройка режима выборки не помогла :( – cici
Ваша проблема, безусловно, в вашем режиме выборки. Какая версия спящего режима вы используете? Старые версии вам может понадобиться FetchMode.EAGER. – teacurran