我正在开发一个Struts2 + Hibernate + Spring应用程序。我试图将用户权限加载到我的会话中,以便将它们恢复到特定的jsp中。
工作流程就是这个:
以下是User
类的代码。
@JoinColumn(name = "id_user_group", referencedColumnName = "id", nullable = false)
@ManyToOne(optional = false, fetch = FetchType.LAZY, targetEntity = UserGroup.class)
public UserGroup getUserGroup() {
return userGroup;
}
以下是UserGroup
class
@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;
}
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);
我认为我很容易理解,我只是使用权限代码及其相关部分创建地图(为了填充菜单等等。
现在问题是......我的tomcat将权限属性显示为空
但奇怪的是,如果我在for循环中添加LOG.debug("Perm: {}", new Object[]{sectionPermission.getCode(), sectionPermission.getSection()});
,那么权限就会出现......
发生了什么?我在使用Hibernate或Spring做错了吗?
答案 0 :(得分:1)
您正在使用延迟加载,因此在您引用权限之前,权限不会被加载。这发生在记录行中。