gpt4 book ai didi

java - 使用Hibernate Lazy Fetchtype时如何加载一组对象?

转载 作者:行者123 更新时间:2023-12-01 16:11:18 25 4
gpt4 key购买 nike

我有一个 Hibernate 域类(比方说 PetOwner),与另一个类(Pets)具有一对多关系

[宠物主人 (1)---------(*) 宠物]

由于提高性能所需的巨大改变,我不得不改变的 fetchtypePetOwner 类中的 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 。但这是一个黑客,我正在寻找一种方法做得更整齐。有什么建议吗?

最佳答案

尝试使用Hibernate#initialize(Object)初始化你的对象。它应该解析集合引用。

我很好奇为什么你想要“渴望”获取而不将获取类型设置为渴望。

关于java - 使用Hibernate Lazy Fetchtype时如何加载一组对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1117770/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com