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

本文探讨了在SSH框架中处理一对多、多对多关联关系数据时出现的死循环问题,深入分析了其根本原因,并提出了三种有效的解决方案,包括在JSON转换时排除关联属性、调整HBM文件中的加载策略及去除不必要的引用对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、问题

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值