gpt4 book ai didi

java - Hibernate 关系加载

转载 作者:行者123 更新时间:2023-11-28 22:53:32 25 4
gpt4 key购买 nike

我正在开发一个 Struts2 + Hibernate + Spring 应用程序。我正在尝试将用户权限加载到我的 session 中,以便将它们恢复到特定的 jsp 中。

工作流程是这样的:

  1. 用户登录
  2. 用户组被hibernate Eagerly加载

这是来自 User 类的代码。

@JoinColumn(name = "id_user_group", referencedColumnName = "id", nullable = false)
@ManyToOne(optional = false, fetch = FetchType.LAZY, targetEntity = UserGroup.class)
public UserGroup getUserGroup() {
return userGroup;
}
  1. 我从用户组恢复了另一个 EAGER 关系

这是 UserGroup 类的代码

@ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinTable(name = "user_section_permission", joinColumns = {
@JoinColumn(name = "id_user_group", nullable = false, updatable = false)},
inverseJoinColumns = {
@JoinColumn(name = "id_section_permission",
nullable = false, updatable = false)})
public List<SectionPermission> getSectionPermissions() {
return sectionPermissions;
}
  1. 用户被保存到 session 中。当登录操作将用户重定向到他的仪表板时,将调用 refreshPermissions 方法

代码如下:

UserGroup userGroup = ((User) session.get("user")).getUserGroup();

Map<String, Section> permissions = new HashMap<>();
List<SectionPermission> sectionPermissions = userGroup.getSectionPermissions();
for (SectionPermission sectionPermission : sectionPermissions) {
permissions.put(sectionPermission.getCode(), sectionPermission.getSection());
}
session.put("permissions", permissions);

我认为这很容易理解,我只是用权限代码和他的相关部分创建了一个 map (为了填充菜单等。

现在的问题是...我的 tomcat 将权限属性显示为空

Tomcat manager image

但神奇的是,如果我在 for 循环中添加 LOG.debug("Perm: {}", new Object[]{sectionPermission.getCode(), sectionPermission.getSection()});然后出现权限...

Tomcat manager image

这是怎么回事?我在使用 Hibernate 或 Spring 时做错了什么吗?

最佳答案

您正在使用延迟加载,因此在您引用它们之前不会加载权限。这发生在日志行中。

关于java - Hibernate 关系加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33374643/

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