使用提取复制 Hibernate Eager 加载

Replicate Hibernate Eager loading using a fetch

我有一个名为 LocType 的 class,它有 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?