使用提取复制 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?
我有一个名为 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?