Hibernate懒加载对象转json异常的解决方式

在Spring+SpringMVC+Hibernate项目中,当使用Jackson将Hibernate的懒加载对象转换为json时遇到死循环导致内存溢出问题。通过在实体类上添加@JsonIgnoreProperties注解,指定不需要转换的属性,例如'assessmentGroup','hibernateLazyInitializer','handler','fieldHandler',成功解决了该问题。" 114075057,10326043,Java实现TCP通信:发送与接收数据接口详解,"['Java TCP接口', '网络编程', '数据交换']

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

问题点:使用Jackson将Hibenrate的懒加载对象转换json时出现死循环导致内存溢出

最近在做一个项目使用的是Spring+SpringMVC+Hibernate的架构

hibernate是一个非常优秀的ORM框架,它将底层JDBC操作都给封装了,我们直接可以像操作对象一样去操作数据库,虽然现在更多的公司更加倾向于架构的轻量化,由Mybatis比较轻便、学习的起点相对Hibernate来说要低以及查询效率较高,所以mybatis的使用人数逐渐超越Hibernate的趋势或者已经超越了Hibernate的使用人数,但是我依然觉得Hibernate的功能比Mybatis强了几倍不止,但是话又说回来框架没有好坏之分,只是看是不是你项目的使用场景。

言归正传来看咱们的问题:

我有两个类 它们是子父级关系表的实体类 一对多的关系

实体类一:    一的一方

@Table(name="assessment_group ")
@Entity
public class AssessmentGroup implements Serializable{
    private static final long serialVersionUID = 1L;
    @Id
    @Column(name="id")
    private String groupId;//主键
    //其他属性....

   //一对多关系配置
    @OneToMany(fetch=FetchType.EAGER,targetEntity=GroupPersonRelation.class,cascade={CascadeType.ALL},mappedBy="assessmentGroup")
    private List<GroupPersonRelation> relationList=new ArrayList<GroupPersonRelation>();

// get、set方法省略

}

实体类二:多的一方

@Table(name="group_person_relation")
@Entity
@JsonIgnoreProperties(value={"assessmentGroup","hibernateLazyInitializer","handler","fieldHandler"})//解决对象转json死循环问题
public class GroupPersonRelation implements Serializable{
    private static final long serialVersionUID = 1L;
    @Id
    private String id;//主键
    //  其他属性 省略

    
    @ManyToOne(fetch = FetchType.EAGER,targetEntity = AssessmentGroup.class,cascade={CascadeType.MERGE,CascadeType.PERSIST})
    @JoinColumn(name = "groupId",referencedColumnName="id")
    private AssessmentGroup assessmentGroup;

     //get、set方法省略

}

配置关系配好了,但是在使用Jackson返回对象时出现了死循环导致内存溢出的问题

因为之前一直在用阿里巴巴的fastjson,不想转json的属性直接加上@JSONField(serialize=false) 就可以搞定,

现在用的是Jackson,也从网上搜了很多种方法比如加 @JsonIgnore注解、配置OpenSessionInView过滤器参数以及其他的一些注解,但是最终没有生效,问题依然出现,终于在查看了源码之后把问题解决了,@JsonIgnoreProperties(value={"assessmentGroup","hibernateLazyInitializer","handler","fieldHandler"})

第一个参数是你不需要转json的对象在本类中的成员变量名,其他的固定写法

很简单吧!!!各位大神们 如有更好的办法 欢迎留言指点。。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值