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

  • 相关阅读:
    curl上传图片文件
    手工制作简单后台模板
    首页自动生成静态化html
    svn-多个项目版本库和自动同步更新post-commit
    Snoopy+phpquery采集demo
    phpstorm使用手册
    mac系统使用帮助
    upupw一键绿色免安装环境包
    去掉文件夹的.svn文件
    centos安装svn服务器
  • 原文地址:https://www.cnblogs.com/jpfss/p/11064247.html
Copyright © 2011-2022 走看看