我有两个班级:
@Entity
@JsonIdentityInfo(
generator = ObjectIdGenerators.PropertyGenerator.class,
property = "id")
public class Client extends AbstractEntity {
...
@OneToMany(mappedBy = "client", fetch = FetchType.EAGER)
@Cascade(org.hibernate.annotations.CascadeType.PERSIST)
private Set<Patient> patients = new HashSet<>();
和
@Entity
@JsonIdentityInfo(
generator = ObjectIdGenerators.PropertyGenerator.class,
property = "id")
public class Patient extends AbstractLastOpenedDateEntity implements Serializable {
...
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "client_id")
@Cascade(org.hibernate.annotations.CascadeType.ALL)
private Client client;
假设我有一份患者名单: - 患者A(来自客户1) - 患者B(来自客户1) -patient C(来自客户2) 当我使用Jackson序列化它时我想要的是什么:
[
{ id: A, client: { id: 1, patients: [A,B]} },
{ id: B, client: { id: 1, patients: [A,B]} },
{ id: C, client: { id: 2, patients: [C]} },
]
但这是我得到的:
[
{ id: A, client: { id: 1, patients: [ A , { id: B, client: { id: 1, patients: [A,B]}]} },
B,
{ id: C, client: { id: 2, patients: [C]} },
]
杰克逊似乎做了一个完整的序列化&#34;只是第一次,然后它做了一个&#34;短序列化&#34; (ID)。 我希望拥有完整的序列化优先级&#34; root&#34; json等级。
谢谢!
答案 0 :(得分:0)
在患者Set中使用@JsonIdentityReference(alwaysAsId = true)注释。 问题是@JsonIdentityInfo将仅完全序列化一个 默认情况下,对象在整个序列化过程中都会出现。