1
我有以下模式:如何处理多个JsonManagedReference和JsonBackReference?
这是我的代码(我已删除访问者和无用属性增加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在我的对象。
- 当我解析
A
,我想摆脱A_B
小号B
未经A_B
小号越来越A
。 - 相反,当我解析
B
时,我想从A_B
得到A
,没有得到B
从A_B
s。
以我的实际代码,所有A_B
s元素总是null
。当我删除@JsonManagedReference("b")
和@JsonBackReference("b")
时,(1)的结果是我需要的,但(2)的结果是无限递归
有人对我的问题有了解吗?预先感谢帮助