zoukankan      html  css  js  c++  java
  • @JsonIgnore @JsonIdentityInfo 处理Hibernate 循环引用的问题

    enterprise和user一对一的关系:

    @Entity
    @Table(name = "enterprise")
    public class Enterprise extends BaseEntity {
    
        private static final long serialVersionUID = 1L;
    
        private User user;
    
        private String name;
    
        @OneToOne(mappedBy = "enterprise")
        public User getUser() {
            return user;
        }
    
        public void setUser(User user) {
            this.user = user;
        }
    
        ...setter/getter
    }
    @Entity
    @Table(name = "APP_USER")
    public class User extends BaseEntity {
        @NotEmpty
        @Column(name = "FIRST_NAME", nullable = false)
        private String firstName;
    
        @Column(name = "LAST_NAME", nullable = true)
        private String lastName;
    
        @OneToOne
        private Enterprise enterprise;
    }

    在controller中,使用ResponseEntity来返回enterprise转换为json之后的字符串。如果不做任何处理,因为enterprise拥有user字段,而user也拥有enterprise字段,自此出现了循环引用的问题,程序将会出错。

    使用@JsonIgnore

    @JsonIgnore
    @OneToOne(mappedBy = "enterprise")
    public User getUser() {
        return user;
    }

    在getUser方法上添加@JsonIgnore注释,返回的enterprise json对象中,将不包括user对象。
    但是如果我们希望在enterprise json对象中包括user的json对象该怎么办呢?

    使用@JsonIdentityInfo

    Annotation used for indicating that values of annotated type or property should be serializing so that instances either contain additional object identifier (in addition actual object properties), or as a reference that consists of an object id that refers to a full serialization. In practice this is done by serializing the first instance as full object and object identity, and other references to the object as reference values.

    在user类或者enterprise类上增加该注解即可。

    @Entity
    @Table(name = "enterprise")
    @JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id")
    public class Enterprise extends BaseEntity

    原文地址:https://blog.csdn.net/jiangshanwe/article/details/72994159

  • 相关阅读:
    C# Thread.Sleep 卡死的问题解决方法
    GridView多行显示 TableAdapter没有Update 问题
    python zlib 压缩 解压 文件夹
    17、【Python】mac安装多个版本的python
    18、【常见算法】二叉树的遍历
    29、【C++基础】内存泄露
    17、【常见算法】topN问题
    16、【常见算法】查找斐波那契数列的第N项
    15、【常见算法】实现sqrt函数
    14、【常见算法】数组分组排序
  • 原文地址:https://www.cnblogs.com/jpfss/p/11064247.html
Copyright © 2011-2022 走看看