У меня есть класс домена Hibernate (скажем PetOwner) с одного до многих отношениях с другим классом (Животные)Как загрузить набор объектов при использовании Hibernate Lazy Fetchtype?
[PetOwner (1) --------- (*) Домашние животные]
Из-за резкого изменения, необходимого для повышения производительности, мне пришлось изменить тип fetchtype метода getPets() в классе PetOwner, чтобы быть ленивым.
Таким образом, текущее отображение выглядит следующим образом
@OneToMany(cascade = {CascadeType.ALL}, fetch = FetchType.LAZY, mappedBy = "petowner")
public Set<Pet> getPets() {
if (pets == null) {
pets = new HashSet<Pet>();
}
return pets;
}
Для некоторых тестовых классов, метод getPets() используется после того, как PetOwner найдена с помощью метода retrievePetOwnerById(). После изменений в отображении это вызывает LazyInitializationException. (В качестве объекта-граф не полностью загружен из-за изменения типа выборки)
я использовал не изящный обходной путь, добавив метод, как показано ниже на DefaultPetOwnerService.
public PetOwner retrievePetOwnerByIdWithPets(Long petOwnerId) {
PetOwner petOwner = retrievePetOwnerById(petOwnerId);
int size = petOwner.getPets().size();
return petOwner;
}
petOwner.getPets(). Размер() должен быть использован, потому что домашние животные не будут загружены до некоторой операции в списке делается. Когда я использую новый метод, исключение LazyInitializationException можно преодолеть. Но это взломать, и я ищу способ сделать это более аккуратно. Есть ли предложения?