java - 使用关系将 JPA obect 反序列化为 JSON
问题描述
我有这个有关系的对象:
@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"
}
]
}
解决方案
我解决了。我使用JsonManagedReference
和JsonBackReference
注释:
@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;
}
推荐阅读
- python - 解决经典 P(n, r) 的 Python 代码:打印一次取 r 的 n 个对象的所有排列,不重复
- python - Python:从fasta文件中读取和打印序列
- javascript - 在 javascript 中,如何检查 textarea 是否只有一行文本?
- github - Github - 仅保留大文件的最后 n 个版本
- chef-infra - 如何使用 json 输入文件覆盖厨师属性
- javascript - Javascript通过子级递归并以HTML显示
- android - 在显示上传错误的 Play 商店中更新 React Native 应用程序时
- php - 在创建表单之前添加选项以选择 EntityType 字段的标签
- firebase - 如何从流构建器中隐藏单个项目
- swift - UIActivityViewController“保存到文件”只需要1个文件时保存多个文件