Hibernate 双向关联转换 JSON 防止死循环

简介: 版权声明:本文首发 http://asing1elife.com ,转载请注明出处。 https://blog.csdn.net/asing1elife/article/details/82732071 ...
版权声明:本文首发 http://asing1elife.com ,转载请注明出处。 https://blog.csdn.net/asing1elife/article/details/82732071

Hibernate 双向关联转换 JSON 防止死循环

Hibernate 中经常存在双向关联的情况,此处将数据转换为 JSON 格式则可能导致死循环

更多精彩

获取数据时只需要单向关联

  1. 这种情况下父类需要子类数据,而子类不需要父类数据
@Entity
@Table(name = "ht_feedback_template")
public class FeedbackTemplate extends BaseModel {
    @OneToMany(mappedBy = "feedbackTemplate", cascade = {CascadeType.ALL}, fetch = FetchType.LAZY)
    @OrderBy("indexNo asc")
    private Set<FeedbackQuestion> questions;

    public Set<FeedbackQuestion> getQuestions() {
        return questions;
    }

    public void setQuestions(Set<FeedbackQuestion> questions) {
        this.questions = questions;
    }
}
  1. 在子类中对父类的引用字段加上 @JsonIgnore 即可
@Entity
@Table(name = "ht_feedback_question")
public class FeedbackQuestion extends BaseModel {
    @ManyToOne
    @JsonIgnore
    private FeedbackTemplate feedbackTemplate;

    public FeedbackTemplate getFeedbackTemplate() {
        return feedbackTemplate;
    }

    public void setFeedbackTemplate(FeedbackTemplate feedbackTemplate) {
        this.feedbackTemplate = feedbackTemplate;
    }
}

获取数据时确实需要双向关联

  1. 在父类对子类的引用字段加上 @JsonManagedReference
@Entity
@Table(name = "ht_feedback_template")
public class FeedbackTemplate extends BaseModel {
    @OneToMany(mappedBy = "feedbackTemplate", cascade = {CascadeType.ALL}, fetch = FetchType.LAZY)
    @OrderBy("indexNo asc")
  @JsonManagedReference
    private Set<FeedbackQuestion> questions;

    public Set<FeedbackQuestion> getQuestions() {
        return questions;
    }

    public void setQuestions(Set<FeedbackQuestion> questions) {
        this.questions = questions;
    }
}
  1. 在子类中对父类的引用字段加上 @JsonBackReference 即可
@Entity
@Table(name = "ht_feedback_question")
public class FeedbackQuestion extends BaseModel {
    @ManyToOne
  @JsonBackReference
    private FeedbackTemplate feedbackTemplate;

    public FeedbackTemplate getFeedbackTemplate() {
        return feedbackTemplate;
    }

    public void setFeedbackTemplate(FeedbackTemplate feedbackTemplate) {
        this.feedbackTemplate = feedbackTemplate;
    }
}
目录
相关文章
|
3月前
|
XML JSON Java
使用IDEA+Maven搭建整合一个Struts2+Spring4+Hibernate4项目,混合使用传统Xml与@注解,返回JSP视图或JSON数据,快来给你的SSH老项目翻新一下吧
本文介绍了如何使用IntelliJ IDEA和Maven搭建一个整合了Struts2、Spring4、Hibernate4的J2EE项目,并配置了项目目录结构、web.xml、welcome.jsp以及多个JSP页面,用于刷新和学习传统的SSH框架。
88 0
使用IDEA+Maven搭建整合一个Struts2+Spring4+Hibernate4项目,混合使用传统Xml与@注解,返回JSP视图或JSON数据,快来给你的SSH老项目翻新一下吧
|
JSON Java 数据库连接
jackson java转json hibernate 造成的堆栈溢出 无限递归问题
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/bitree1/article/details/64128051 contr...
1301 0
|
Web App开发 前端开发 Java
IntelliJ IDEA:Getting Started with Spring MVC, Hibernate and JSON实践
原文:IntelliJ IDEA:Getting Started with Spring MVC, Hibernate and JSON实践 最近把编辑器换成IntelliJ IDEA,主要是Eclipse中处理Maven项目很不方便,很早就听说IntelliJ IDEA的大名了,但是一直没机会试试。
1252 0
|
JSON Java 数据库连接
SpringMVC、Hibernate系列之级联对象的json序列化
       最近为了加深学习Spring和Hibernate,就利用Spring4、Hibernate5搭建了SpringMVC与Hibernate整合的平台框架。搭建过程曾遇到了一系列的棘手问题,在这里将相应的解决方案给予记录和分享。 问题描述 利用Jackson序列化Hibernate一对多关联对象时,出现死循环。花费了1天半时间,必须记录下来。 问题分析 很显然是由于
1804 0
|
JSON 前端开发 Java
hibernate+spring mvc, 解决hibernate 对象懒加载 json序列化问题
引用地址 在使用Spring MVC时,@ResponseBody 注解的方法返回一个有懒加载对象的时候出现了异常,以登录为例:   Java代码   @RequestMapping("login")       @ResponseBody       public O...
1124 0
|
JSON Java 数据库连接
关于hibernate的实体类中有集合类型转化成JSON的工具类 - 怀念今天的专栏 - 博客频道
Json 来源:http://blog.csdn.net/zczzsq/article/details/18697045#1536434-hi-1-4387-42d97150898b1af15ddaae52f91f09c2
856 0
|
6月前
|
SQL 缓存 Java
框架分析(9)-Hibernate
框架分析(9)-Hibernate
|
19天前
|
缓存 Java 数据库连接
Hibernate:Java持久层框架的高效应用
通过上述步骤,可以在Java项目中高效应用Hibernate框架,实现对关系数据库的透明持久化管理。Hibernate提供的强大功能和灵活配置,使得开发者能够专注于业务逻辑的实现,而不必过多关注底层数据库操作。
12 1
|
3月前
|
SQL Java 数据库连接
Hibernate 是一款开源 ORM(对象关系映射)框架,封装了 JDBC,允许以面向对象的方式操作数据库,简化了数据访问层的开发。
Hibernate 是一款开源 ORM(对象关系映射)框架,封装了 JDBC,允许以面向对象的方式操作数据库,简化了数据访问层的开发。通过映射机制,它可以自动处理对象与数据库表之间的转换,支持主流数据库,提高了代码的可移植性和可维护性。其核心接口包括 SessionFactory、Session 和 Transaction 等,通过它们可以执行数据库的 CRUD 操作。配置方面,需在项目中引入 Hibernate 及数据库驱动依赖,并创建 `hibernate.cfg.xml` 配置文件来设置数据库连接和 Hibernate 行为参数。
47 1
|
3月前
|
数据库 Java 数据库连接
Struts 2 与 Hibernate 的完美邂逅:如何无缝集成两大框架,轻松玩转高效 CRUD 操作?
【8月更文挑战第31天】本文通过具体示例介绍了如何在 Struts 2 中整合 Hibernate,实现基本的 CRUD 操作。首先创建 Maven 项目并添加相关依赖,接着配置 Hibernate 并定义实体类及其映射文件。然后创建 DAO 接口及实现类处理数据库操作,再通过 Struts 2 的 Action 类处理用户请求。最后配置 `struts.xml` 文件并创建 JSP 页面展示用户列表及编辑表单。此示例展示了如何配置和使用这两个框架,使代码更加模块化和可维护。
85 0