我有一个Hibernate域类(让我们说PetOwner)与另一个类(Pets)有一对多的关系
[PetOwner(1)---------(*)Pet]
由于改善性能所需的急剧变化,我不得不改变fetch的类型 PetOwner类中的getPets()方法是懒惰的。
所以当前的映射如下所示
@OneToMany(cascade = {CascadeType.ALL}, fetch = FetchType.LAZY, mappedBy = "petowner")
public Set<Pet> getPets() {
if (pets == null) {
pets = new HashSet<Pet>();
}
return pets;
}
对于某些测试类,在使用retrievePetOwnerById()方法找到PetOwner之后使用getPets()方法。对映射的更改导致 LazyInitializationException 。(由于更改了获取类型,对象图未完全加载)
我通过向DefaultPetOwnerService添加如下所示的方法,使用了一种不优雅的解决方法。
public PetOwner retrievePetOwnerByIdWithPets(Long petOwnerId) {
PetOwner petOwner = retrievePetOwnerById(petOwnerId);
int size = petOwner.getPets().size();
return petOwner;
}
必须使用petOwner.getPets()。size(),因为在列表上的某些操作完成之前不会加载宠物。 当我使用新方法时,可以克服LazyInitializationException。但它是一个黑客,我正在寻找一种方式 做得更整齐。有什么建议吗?