weixin_42364851 2010-05-07 10:07
浏览 222
已采纳

hibernate懒加载问题

举例说明

用户表-角色表-权限表三表多对多(ManyToMany)关联,其中如果用户-角色级联fetch=eager,角色和权限对应的必须为lazy,否则会抛异常org.hibernate.loader.MultipleBagFetchException: cannot simultaneously fetch multiple bags

请问如果3表都像配置fetch=eager如何解决,小弟在此先谢过!

  • 写回答

1条回答 默认 最新

  • 紫翎观星 2010-05-09 17:31
    关注

    Hibernate Annotation的 *ToOne默认的FetchType是EAGER的,fetch=FetchType.EAGER加载数据的时候是一次性加载可能会造成不必要的性能浪费,使用是应该慎重考虑。
    对于你这个是3表多对多,在抓取策略上可以考虑使用子查询抓取@Fetch(FetchMode.SUBSELECT)。
    [code="java"]
    @ManyToMany
    @JoinTable(name = "T_USER_ROLE", joinColumns = { @JoinColumn(name = "USER_ID") }, inverseJoinColumns = { @JoinColumn(name = "ROLE_ID") })
    @Fetch(FetchMode.SUBSELECT)
    public Set getRoles() {
    return roles;
    }
    [/code]
    @Fetch(FetchMode.SUBSELECT)产生两条sql语句,第二条语句使用id in (.....)查询出所有关联的数据。除非你显式的指定lazy="false"禁止延迟抓取(lazy fetching),否则只有当你真正访问关联关系的时候,才会执行第二条select语句。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 做个有关计算的小程序
  • ¥15 MPI读取tif文件无法正常给各进程分配路径
  • ¥15 如何用MATLAB实现以下三个公式(有相互嵌套)
  • ¥30 关于#算法#的问题:运用EViews第九版本进行一系列计量经济学的时间数列数据回归分析预测问题 求各位帮我解答一下
  • ¥15 setInterval 页面闪烁,怎么解决
  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化