与杰克逊的无限递归

时间:2011-11-08 13:38:11

标签: json hibernate jackson

我遇到了Jackson 1.6.3和Hibernate的问题。我在这里找到了这个帖子:Infinite Recursion with Jackson JSON and Hibernate JPA issue

但它没有解决问题。

我有一个具有传入和传出关系的Node对象。即使使用@JsonManagedReference注释,在应用服务器的控制台上我也可以看到抛出的异常(无限递归)。

还有其他选择吗?

@Entity
@Table(name="nodes")
public class Node implements Serializable {

@Id
private String id;

@Column(name="x_pos")
private double x;


@Column(name="y_pos")
private double y;

@OneToMany
@JoinColumn(name="source")
@JsonManagedReference("outgoingRelations")
private Set<Relation> outgoingRelations;


@OneToMany
@JoinColumn(name="target")
@JsonManagedReference("incomingRelations")
private Set<Relation> incomingRelations;



@Entity
@Table(name="relations")
public class Relation implements Serializable {

@Id
private Long id;

@ManyToOne
@JoinColumn(name="source")
@JsonBackReference("outgoingRelations")
private Node source;

@ManyToOne
@JoinColumn(name="target")
@JsonBackReference("incomingRelations")
private Node target;

此致

2 个答案:

答案 0 :(得分:2)

答案 1 :(得分:0)

我们可以通过以下3种方式尝试在Node端或Relation端打破循环

  • 使用@JsonManagedReference 和@JsonBackReference
  • 使用@JsonIdentityInfo
  • 使用@JsonIgnore

使用@JsonIdentityInfo

    @Entity
    @Table(name = "nodes")
    @JsonIdentityInfo(
              generator = ObjectIdGenerators.PropertyGenerator.class, 
              property = "id")
    public class Node {
        ...
    }
    
    
    
    @Entity
    @Table(name = "relations")
    @JsonIdentityInfo(
              generator = ObjectIdGenerators.PropertyGenerator.class, 
              property = "id")
    public class Relation {
        ...
    }

使用@JsonIgnore

@OneToMany(fetch = FetchType.LAZY,mappedBy="node")
@JsonIgnore
private List<Node> lstNode;

有关工作演示的更多详细信息here