2015-11-06 19 views
1

我有以下模式:如何处理多个JsonManagedReference和JsonBackReference?

model

这是我的代码(我已删除访问者和无用属性增加lisibility):

答:

@Entity 
@Table(name = "a", schema = "public") 
public class A implements Serializable { 
    @Id 
    private Long id; 

    @OneToMany(fetch = FetchType.LAZY, mappedBy = "pk.a", cascade = CascadeType.ALL) 
    @JsonManagedReference("a") 
    private Set<A_B> ABs = new HashSet<>(); 
} 

B:

@Entity 
@Table(name = "b", schema = "public") 
public class B implements Serializable { 
    @Id 
    private Long id; 

    @OneToMany(fetch = FetchType.LAZY, mappedBy = "pk.b", cascade = CascadeType.ALL) 
    @JsonManagedReference("b") 
    private Set<A_B> ABs = new HashSet<>(); 
} 

A _B:

@Entity 
@Table(name = "a_b", schema = "public") 
@AssociationOverrides({ 
     @AssociationOverride(name = "pk.a", 
       joinColumns = @JoinColumn(name = "a_id")), 
     @AssociationOverride(name = "pk.b", 
       joinColumns = @JoinColumn(name = "b_id")) 
}) 
public class A_B implements Serializable { 
    @EmbeddedId 
    private A_BId pk = new A_BId(); 

    @OneToOne 
    private B b; 
} 

A_BId:

@Embeddable 
public class A_BId implements Serializable { 
    @ManyToOne(fetch = FetchType.LAZY) 
    @JsonBackReference("a") 
    private A a; 

    @ManyToOne(fetch = FetchType.LAZY) 
    @JsonBackReference("b") 
    private B b; 
} 

我使用com.fasterxml.jackson.datatype:jackson-datatype-hibernate4解析JSON在我的对象。

  1. 当我解析A,我想摆脱A_B小号B未经A_B小号越来越A
  2. 相反,当我解析B时,我想从A_B得到A,没有得到BA_B s。

以我的实际代码,所有A_B s元素总是null。当我删除@JsonManagedReference("b")@JsonBackReference("b")时,(1)的结果是我需要的,但(2)的结果是无限递归

有人对我的问题有了解吗?预先感谢帮助

回答

0

我无法找到一个最终的答案,但是这是最接近的解决方案

https://github.com/FasterXML/jackson-databind/issues/1091

添加此标签每个类别的问题

@JsonIdentityInfo的(发电机= ObjectIdGenerators.PropertyGenerator.class,property =“id”) public class A {