나는 하이버 네이트 도메인 클래스가 다른 클래스 (애완 동물)와 많은 관계로 하나Hibernate Lazy Fetchtype이 사용될 때 객체 세트를로드하는 방법은 무엇입니까?
[PetOwner (1) --------- (*) 애완 동물]
와 (의이 PetOwner을 가정 해 봅시다)성능을 향상시키기 위해 과감한 변경이 필요했기 때문에 PetOwner 클래스의 getPets() 메소드의 fetchtype을 게으 르도록 변경해야했습니다. 몇 가지 테스트 클래스
@OneToMany(cascade = {CascadeType.ALL}, fetch = FetchType.LAZY, mappedBy = "petowner")
public Set<Pet> getPets() {
if (pets == null) {
pets = new HashSet<Pet>();
}
return pets;
}
다음과 같이
그래서 현재 매핑은 PetOwner가 retrievePetOwnerById() 메소드를 사용하여 발견 된 후 getPets() 메소드를 사용 보인다. 맵핑을 변경 한 후에이 LazyInitializationException이시킨다.
내가에 아래와 같은 방법을 추가하지 않은 고급 해결 방법을 사용 (객체 그래프가 완전히 입력 페치의 변화로 인해로드되지 않기 때문에) DefaultPetOwnerService.public PetOwner retrievePetOwnerByIdWithPets(Long petOwnerId) {
PetOwner petOwner = retrievePetOwnerById(petOwnerId);
int size = petOwner.getPets().size();
return petOwner;
}
petOwner.getPets(). 크기는()는 애완 동물이 완료 목록에 대한 몇 가지 동작까지로드되지 않기 때문에 사용할 수 있습니다. 새 메서드를 사용하면 LazyInitializationException을 극복 할 수 있습니다. 그러나 그것은 해킹이며, 나는 이것을 더 깔끔하게 처리하기 위해 길을 찾고 있습니다. . 제안이 있습니까?