spring hibernate 多对多中出现set不断循环的情况 20
单位dept表和分组group表,一个组可以有多个单位,一个单位可以在多个组。数据量大的时候,set<>中的数据出现了错误Debug后发现:读取dept的后会自动去找se...
单位dept表和分组group表,一个组可以有多个单位,一个单位可以在多个组。
数据量大的时候,set<>中的数据出现了错误
Debug后发现:读取dept的后会自动去找set<>groups,而set中的每一个group对象又去找set<dept>,就这样一直循环下去
下面是我仿照hibernate开发文档写的配置
class Dept{
....
Set<Group> groups;
get/set....
}
DEPT.hbm.xml配置
<set name="groups" table="DEPT_TO_GROUP" inverse="true" lazy="true">
<key column="DEPTID"/>
<many-to-many class="com.bean.Group" column="GROUPID" />
</set>
----------------------------------------------------------------------------------------
class Group{
....
set<Dept> depts;
get/set....
}
Group.hbm.xml配置
<set name="depts" table="DEPT_TO_GROUP" lazy="true">
<key column="GROUPID"/>
<many-to-many class="com.bean.Dept" column="DEPTID"/>
</set>
但上面的问题还是会出现,请问有人知道为什么会出现这种情况吗?如何解决?
读取方式是:getHibernateTemplate().find("from Dept t") 展开
数据量大的时候,set<>中的数据出现了错误
Debug后发现:读取dept的后会自动去找set<>groups,而set中的每一个group对象又去找set<dept>,就这样一直循环下去
下面是我仿照hibernate开发文档写的配置
class Dept{
....
Set<Group> groups;
get/set....
}
DEPT.hbm.xml配置
<set name="groups" table="DEPT_TO_GROUP" inverse="true" lazy="true">
<key column="DEPTID"/>
<many-to-many class="com.bean.Group" column="GROUPID" />
</set>
----------------------------------------------------------------------------------------
class Group{
....
set<Dept> depts;
get/set....
}
Group.hbm.xml配置
<set name="depts" table="DEPT_TO_GROUP" lazy="true">
<key column="GROUPID"/>
<many-to-many class="com.bean.Dept" column="DEPTID"/>
</set>
但上面的问题还是会出现,请问有人知道为什么会出现这种情况吗?如何解决?
读取方式是:getHibernateTemplate().find("from Dept t") 展开
1个回答
展开全部
应该没有关系的吧,它debug进去是会看到这样的,你看一下他们set<groups>和set<dept>两个对象的编号应该是一样,说明两个相互引用的一直是同一个对象,那就没有关系,只是你看的窗口里面看出来感觉是一直循环的而已
更多追问追答
追问
不是互相调用
查询到的dept的集合groups中有10个group对象
第一个group的集合depts中有3个dept,假设一个dept对象为dept1
第二个group的集合depts中有2个dept,假设一个dept对象为dept2
........
dept1中的集合groups中有20个group
而dept2中的集合groups中有5个group
里面的group又有depts......
追答
还是感觉应该是没有问题,如果对象很多,不会再创建重复对象的,比如部门A下面有1、2、3三组,部门B有4、5两组,5组又同时属于部门A、B,然后你看到的部门A、B点进去又是重复的1、2、3……这样的吧,但是他们一共也就创建了A、B、1、2、3、4、5,7个对象啊,只是debug的是图上看见的每个对象间会相互引用而已,如果你想得那样一直创建对象,那内存早崩了。如果你用不上一次性拿出来的这么多数据,那你就把你的这两个集合设置成懒加载的,等你用到了它再去加载出来。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询