• @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

  • 相关阅读:
    MySQL 一般模糊查询的几种用法
    MySQL插入中文数据报错
    BeanUtils.populate 的作用
    分分钟搞定 JSP 技术
    margin-top相对谁的问题
    常用汉字的Unicode码表
    从InputStream到String_写成函数
    Http请求和响应应用
    发布mvc报错:403.14-Forbidden Web 服务器被配置为不列出此目录的内容
    导出到excel
  • 原文地址:https://www.cnblogs.com/jpfss/p/11064247.html
Copyright © 2020-2023  润新知