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

  • 相关阅读:
    【模板】辗转相除法
    【模板】冰茶姬(大概是全的?)
    【模板】快速幂
    【模板】线段树-区间修改
    【模板】线段树-单点修改,区间查询
    【模板】dijkstra与floyd
    【模板】SPFA(不完全详解)
    【济南集训】随机分数
    P3205 [HNOI2010]合唱队
    最大子列2
  • 原文地址:https://www.cnblogs.com/jpfss/p/11064247.html
Copyright © 2011-2022 走看看