hibernate - 即使标记为延迟加载,Hibernate 也会急切地加载
问题描述
我有以下实体关系。
- 一个用户有多个用户组。
- 每个用户组有一个用户角色。
实体及其关系映射如下:
public class UserGroup {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", unique = true)
private Long id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "user_id", referencedColumnName = "user_id", nullable = false)
@Fetch(FetchMode.JOIN)
private User user;
@OneToOne(mappedBy = "userGroup", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@Setter(AccessLevel.NONE)
@Fetch(FetchMode.JOIN)
private UserRole userRole;
}
public class User {
@OneToMany(mappedBy = "user", fetch = FetchType.EAGER)
@Cascade(org.hibernate.annotations.CascadeType.ALL)
@Fetch(FetchMode.JOIN)
private Set<UserGroup> userGroups;
}
public class UserRole {
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "user_group_id")
@Fetch(FetchMode.JOIN)
private UserGroup userGroup;
}
当我使用以下内容执行简单的查找查询时:
userGroupDao.get(id)
我看到一个休眠查询,它加入了用户组、用户、用户角色。我只想要 userGroup 查询,因为user
和userRole
都标有FetchType.LAZY
。这里有初始化问题吗?
这是休眠查询:
Hibernate: /* criteria query */ select ...<list of columns>... from user_groups this_ inner join users storeduser2_ on this_.user_id=storeduser2_.user_id left outer join user_roles storeduser3_ on this_.id=storeduser3_.user_group_Id where this_.id=?
Hibernate: select ...<list of columns>... user_groups usergroupn0_ left outer join user_roles storeduser1_ on usergroupn0_.id=storeduser1_.user_group_Id where usergroupn0_.user_id=?
解决方案
根据链接
在集合或单值关联映射上使用 fetch="join",您实际上将避免第二个 SELECT(因此使关联或集合非惰性)
推荐阅读
- php - htaccess HTTPS 重定向总是重定向到索引
- vba - 在 VBA 中更改图表 x 轴(类别) - 过滤空白
- asp.net-core - 在 Kestral Web 服务器中配置请求超时
- mysql - SequelizeConnectionRefusedError:连接 ECONNREFUSED 127.0.0.1:3306
- docker - 尝试与主机共享卷时出现 docker 错误
- android - 无法解码流:java.io.FileNotFoundException:没有这样的文件或目录)
- sql-server - 在 T-SQL 中对字符范围使用通配符
- firebase - 将数据从 Firestore 拉入 Flutter 配置文件页面
- python - PyQt5:程序崩溃并且不显示更多错误信息?
- java - 如何在数组中安排 Firebase 检索?