gpt4 book ai didi

java - 将 JAVA 对象反序列化为具有关系的 JSON

转载 作者:行者123 更新时间:2023-12-01 17:03:44 25 4
gpt4 key购买 nike

我有这个具有关系的对象:

@Entity
@Table(name = "data_model")
public class DataModel {

@Id
@GeneratedValue
@Column(name = "model_id")
private Integer id;

@Column(name = "name")
private String name;

@OneToMany(mappedBy = "dataModel", cascade = {CascadeType.PERSIST, CascadeType.REMOVE, CascadeType.MERGE})
private List<OutputField> outputFields;
}

和:

@Entity
@Table(name = "data_model_output_field")
public class OutputField {

@Id
@GeneratedValue
@Column(name = "output_field_id")
private Integer id;

@Column(name = "sourceTable")
private String sourceTable;

@JsonIgnore
@ManyToOne(optional = false, fetch = FetchType.LAZY, cascade = CascadeType.REFRESH)
@JoinColumn(name = "model_id")
private DataModel dataModel;
}

我想将此 json 反序列化为 Java 对象:

{
"name": "New data model with join",
"outputFields": [
{
"sourceTable": "r"
},
{
"sourceTable": "ri"
}
]
}

当我尝试使用 Jackson 反序列化它时,我得到了它: enter image description here如何使用 Jackson 将父引用放入子元素中?

最佳答案

我解决了。我使用了 JsonManagedReferenceJsonBackReference 注释:

@Entity
@Table(name = "data_model")
public class DataModel {

@Id
@GeneratedValue
@Column(name = "model_id")
private Integer id;

@Column(name = "name")
private String name;

@JsonManagedReference(value = "outputFields")
@OneToMany(mappedBy = "dataModel", cascade = {CascadeType.PERSIST, CascadeType.REMOVE, CascadeType.MERGE})
private List<OutputField> outputFields;
}
@Entity
@Table(name = "data_model_output_field")
public class OutputField {

@Id
@GeneratedValue
@Column(name = "output_field_id")
private Integer id;

@Column(name = "sourceTable")
private String sourceTable;

@JsonBackReference(value = "outputFields")
@ManyToOne(optional = false, fetch = FetchType.LAZY, cascade = CascadeType.REFRESH)
@JoinColumn(name = "model_id")
private DataModel dataModel;
}

关于java - 将 JAVA 对象反序列化为具有关系的 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61479523/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com