当前位置: 首页 > 知识库问答 >
问题:

Hibernate关系加载

姬阳曜
2023-03-14

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

工作流程如下:

  1. 用户登录
  2. Hibernate热切地加载了用户组
@JoinColumn(name = "id_user_group", referencedColumnName = "id", nullable = false)
@ManyToOne(optional = false, fetch = FetchType.LAZY, targetEntity = UserGroup.class)
public UserGroup getUserGroup() {
    return 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;
}
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);

出什么事了?我是在用Hibernate还是Spring做错了什么?

共有1个答案

郜振国
2023-03-14

您使用的是惰性加载,因此在引用权限之前不会加载它们。这发生在伐木线上。

 类似资料:
  • 孩子:@EDIT感谢@MithatKonuk 和家人:@EDIT感谢@米塔科努克 我想得到作为家庭一部分的孩子的名单。我尝试进行查询:@编辑感谢@MithatKonuk 当我尝试运行它时,总是会出现错误: 我需要你的帮助。 @编辑好的,所以我将此代码更新为完整的实体。你还需要更多吗?我很抱歉,也许这很容易,但是我正在学习Hibernate,我不知道这个cos出了什么问题。谢谢你的回答。

  • 问题内容: 我有5个MySQL InnoDB表:每个表都在Hibernate中映射并起作用。我玩过使用StatelessSession / Session和JDBC批处理大小。我删除了任何生成器类,以使MySQL处理id生成- 但它的执行速度仍然很慢。这些表中的每一个都在java类中表示,并相应地在hibernate中进行映射。目前,当需要将数据写出时,我遍历对象并执行一个(如果正在使用State

  • 我目前在数据库中的一对一/多对一映射时遇到问题。我希望我的图书表具有与“出版商”、“流派”、“评级”和“状态”表的@ManyToOne映射。 这是我的Book实体类的外观: 例如,我的Publisher实体类(类型、评级和状态类完全相同): 唯一的区别是类型、评级和状态的书籍字段,f. e: 这就是我的堆栈跟踪的样子: 更新的堆栈跟踪:

  • 我在hibernate中搜索建立关系的各种可能性,遇到了下面的代码片段

  • 若要添加一个关系,点击工具栏的 按钮,并拖放子实体到父实体。若要显示或隐藏链接的名标签,简单地在属性窗格中勾选或取消勾选“显示名”选项。 当你移动滑鼠到一个关系连接器时,父和子实体的边界会分别变为绿色和蓝色。 在画布中关系对象的弹出式菜单选项包括: 选项 描述 基数在 实体名1 设置基数在实体名1:无、唯一、多个、一或多个、零或一个、零或多个。 基数在 实体名2 设置基数在实体名2:无、唯一、多个

  • 若要添加一个关系,点击工具栏的 按钮,并由子实体拖拉一个属性到父实体的属性。若要显示或隐藏链接的名标签,简单地在属性窗格中勾选或取消勾选“显示名”选项。 当你移动滑鼠到一个关系连接器时,父和子实体的边界会分别变为绿色和蓝色。此外,父和子实体的参考属性均会高亮显示。 在画布中关系对象的弹出式菜单选项包括: 选项 描述 设计关系 在实体设计器中编辑关系。 基数在 实体名1 设置基数在实体名1:无、唯一