Hibernate之关系延迟加载(json死循环问题的解决方法)

一、问题

在SSH框架对一些一对多,多对多关联关系的数据做分页查询的时候,出现了死循环的状态

二、原因(你中有我,我中有你)

原因在于你要转化的对象里配置了对另外一个对象的关联,而那个对象里又配置了对你这个对象的关联。比如我的两个类叫Shop(商店)和Staff(员工),一个商店可以有多个员工,我给这两个对象配置了双向的一对多和多对一的关联关系。这时候问题出现了,JSON lib在把shop对象转化为json字符串的时候,发现shop里有个Set,它就会去级联的把Set转化为json字符串,在它遍历Set的时候,发现Staff里又有一个Shop对象,这时候它又会去尝试把shop转化为json字符串,然后就发现shop里又有Set,如此周而复始,就形成了死循环。


{
    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","另一个实体类中对本类的对象属性");

 

你可能感兴趣的:(Hibernate)