java - Hibernate 初始化一个组/实体集合
问题描述
我有一个在页面中获取实体的查询。每个页面包含 100 个实体。对于这 100 个实体,我需要获取一些惰性获取的嵌套实体。
发生的情况是我为主要实体执行了 1 个 SELECT,然后为嵌套实体执行了 100 个 SELECT。
我正在寻找一种方法来批量初始化这 100 个嵌套的,因此我总共有 1 个 SELECT 用于主实体,1 个用于嵌套。
我的结构如下,如果不改变我更喜欢(我们在 EAGER fetches 上遇到了很多问题)
public class MyMainEntity {
private NestedEntity nested;
@Override
@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true)
@JoinColumn(foreignKey = @ForeignKey(name = "exFK_Nest_Enth"))
public NestedEntity getNested() {
...
}
有没有办法做到这一点Hibernate.initialize()
解决方案
默认情况下,休眠最新版本遵循JPA 2.0 规范:
与以下的关系:
ToMany: Lazy
ToOne: Eager
但如果你使用的是旧版本的 Hibernate,所有关系默认都带有Lazy
在这种情况下,当您想尝试检索子关系时,请使用JOIN FETCH
,例如:
Select m from MyMainEntity m JOIN FETCH m.nested;
推荐阅读
- android - 在现在不推荐使用的 android 中使用什么来代替 AlwaysOnHotwordDetector?
- python - 使用 JSON URL 调用从 Shopee 抓取产品信息
- xaml - 集合视图项目中的集合视图不可见
- python - 将来自异步调用的 API 响应分配给预先存在的 python 类实例
- python - 在kivy中更改页面滑动区域的大小
- amazon-web-services - 没有区域的 Amazon EC2 客户端构建器
- jenkins - 每当我通过单击“立即构建”选项执行作业时,Jenkins“轮询 SCM”选项就会自动启用
- javascript - 在 d3.js v6+ 中将元素标记为单击
- mongodb - 在 Mongoose 中使用聚合和查找
- java - 如何测试使用文件创建时间的方法