欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

2010.04.08———cannot simultaneously fetch multiple bags异常

程序员文章站 2022-03-02 15:40:19
...
2010.04.08———cannot simultaneously fetch multiple bags异常


Caused by: org.hibernate.HibernateException: cannot simultaneously fetch multiple bags,


用户登录时,同步实时加载用户的角色对象、权限对象,而往往这些关系都是多对多关系,就单一列内容来看存在重复的值,从而引起multiple bags。我在网上搜索这类结果,几乎都提出一个解决办法——采用延迟加载,即fetch=FetchType.LAZY,这样就束缚了框架的强大功能

问题原因就是,当持久框架抓取一方的对象时,同时加载多方的对象放进容器中,多方又可能与关联其它对象,Hibernate实现的JPA,默认最高抓取深度含本身级为四级(它有个属性配置是0-3),若多方(第二级)存在重复值,则第三级中抓取的值就无法映射,按照这个道理,就应该报出无法同时加载多个包之异常

一对多或多对多的多方数据抓取过来后必须用容器类存,例如Set、List、Map等,主要就在这个容器上

即@ManyToMany或@OneToMany的Many方此时一定用Set容器来存放,而不能用List集合。