一、问题
在SSH框架对一些一对多,多对多关联关系的数据做分页查询的时候,出现了死循环的状态
二、原因(你中有我,我中有你)
原因在于你要转化的对象里配置了对另外一个对象的关联,而那个对象里又配置了对你这个对象的关联。比如我的两个类叫Shop(商店)和Staff(员工),一个商店可以有多个员工,我给这两个对象配置了双向的一对多和多对一的关联关系。这时候问题出现了,JSON lib在把shop对象转化为json字符串的时候,发现shop里有个Set<Staff>,它就会去级联的把Set<Staff>转化为json字符串,在它遍历Set的时候,发现Staff里又有一个Shop对象,这时候它又会去尝试把shop转化为json字符串,然后就发现shop里又有Set<Staff>,如此周而复始,就形成了死循环。
<!--Shop对象---套入Staff对象---Shop对象套入-->
{
name:..
id:..
staff:[
{age:..,sex:..,shop:{name:..,id:..,staff:[...]}}
]
}
三、解决
1.在将对象转成Json数据时,将相关联的数据属性排除(页面上不需要展示某一相关联数据)
JsonConfig config = new JsonConfig();
config.setExcludes(new String[]{"currentPage","pageSize","detachedCriteria","Subareas");
2.在hbm文件相关属性上将延迟加载设成立即加载(lazy="false",全能)
3.去除某一方类中不需要的引用对象
A-B关联,在A类中获取数据JSON,我们只需要调取B中的数据信息,不需要B中再次对A的引用对象信息,将其去除,要不还是死循环
A{ B{
id sex
age home
B A
} }
JsonConfig config = new JsonConfig();
config.setExcludes(new String[]{"currentPage","pageSize","detachedCriteria","另一个实体类中对本类的对象属性");