gpt4 book ai didi

java - 使用 fetch 复制 Hibernate 预加载

转载 作者:行者123 更新时间:2023-12-01 09:54:27 25 4
gpt4 key购买 nike

我有一个名为 LocType 的类,它有 30 个元素,并且与 LocProfile 有一个 @OneToMany 关系,它有 40 个元素。我必须做一些计算来确定用户选择位置后应该关联哪个 LocTypeProfile,因此它需要在 jsp 端可用。

如果我像下面这样定义 Eager 初始化的关系,当我从 LocType 检索元素时,它会为我提供 30 个元素,其中包含存储在列表中的一对多关系的实例 - 这是我想要的行为。

@OneToMany(fetch = FetchType.EAGER, mappedBy = "LocType ", cascade = CascadeType.ALL) 
private List<LocTypeProfile > locTypeProfiles;

现在,如果我为了良好实践而将映射更改为延迟加载

@OneToMany(mappedBy = "creditTypes")

并尝试使用 fetch 进行查询

select lt from LocTypes lt left join fetch lt.locTypeProfiles

我得到了 40 个元素,其中数据被展平。

我的问题是有没有办法在这种情况下复制 Eager 初始化的行为?

最佳答案

当对 OneToMany 关系执行 join fetch 时,您需要在 select 语句中使用 distinct,否则将创建一个实体提取的每一行。

尝试:

select distinct lt from LocTypes lt left join fetch lt.locTypeProfiles

引用:One-To-Many relationship gets duplicate objects whithout using “distinct”.Why?

关于java - 使用 fetch 复制 Hibernate 预加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37354977/

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