Java Hibernate json infinite recursion with self referencing class

后端 未结 2 720
攒了一身酷
攒了一身酷 2020-12-18 14:56

class employee:

@Entity
@Table(name = \"Employee\")
public class Employee {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = \         


        
相关标签:
2条回答
  • 2020-12-18 15:02

    There are bunch of options depends on your requirement:

    1) @JsonIgnore can be used to avoid serialization of the field.

    @OneToMany(mappedBy="manager")
    @JsonIgnore
    private Set<Employee> employees;
    

    2) @JsonView can hide one part of the relationship as internal view (but will appear if you will write JSON object with Internal view):

    @OneToMany(mappedBy="manager")
    @JsonView(Views.Internal.class)
    private Set<Employee> employees;
    
    @ManyToOne(cascade={CascadeType.ALL})
    @JoinColumn(name = "DepartmentID")
    @JsonView(Views.Public.class)
    private Department department;
    

    3) Using custom serialiazer you can determine the rules of building your JSON object yourself.

    4) Using @JsonIdentityInfo on classes (to indicate that properties of that type should have feature enabled) as well as on individual properties (to support cases where type itself can not be annotated; or to use different id generation sequence).

    Example 1 @JsonIdentityInfo

    Example 2 @JsonIdentityInfo

    0 讨论(0)
  • 2020-12-18 15:09

    I know that this question is old but just in case someone stumbles upon this.

    You've put the annotations in the wrong order. Here is my example:

    @Getter
    @Setter
    @NoArgsConstructor
    public class OutboundGoodsTypeDTO extends OutboundEntityDTO {
    
      @JsonManagedReference
      private OutboundGoodsTypeDTO parent;
    
      @JsonBackReference
      private Set<OutboundGoodsTypeDTO> goodsTypes;
    }
    

    From the documentation:

    @JsonManagedReference

    Annotation used to indicate that annotated property is part of two-way linkage between fields; and that its role is "parent" (or "forward") link.

    @JsonBackReference

    Annotation used to indicate that associated property is part of two-way linkage between fields; and that its role is "child" (or "back") link.

    0 讨论(0)
提交回复
热议问题