首页 > 解决方案 > 一对多情况下的Json实体序列化;选择性子字段序列化

问题描述

我有 jpa(2.1) 和 hibernate(5.3.6) 的 web 项目。我必须做一些必须保存和检索一些数据的 servlet。所以,如果我有两个课程:

public class Parent{

@Column(name="id")
private int id;

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

...

@OneToMany(orphanRemoval = true, mappedBy = "parent")
@Cascade({ CascadeType.ALL })
private List<Child> childs = new ArrayList<Child>();
}

public class Child{

@Column(name="id")
private int id;

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

...

@ManyToOne(fetch = FetchType.LAZY)
@Cascade({ CascadeType.ALL })
@JoinColumn(name = "parentId", foreignKey = @ForeignKey(name = "MyForeignKey"), nullable = true, updatable = true, insertable = true)
private Parent parent;

}

我有两种情况:

  1. 我需要让所有孩子的父母但是在序列化时我只想看到孩子的ID,比如:

    [{ "id":1, "name": "parent1", "childs":[{ "id":10 }, { "id":18 }] }]

  2. 无论是哪个孩子,我都需要查看所有属性,例如:

    [{ "id":10, "name": "child10" }]

我尝试在不同的字段上使用gson库注释

@Expose(serialize="false", deserialize="true") 

但我无法实现这两种行为(第一种情况和第二种情况),我得到或:

父母->

[{
"id":1,
"name": "parent1"
}]

有单独的孩子->

[{
"id":10,
"name": "child10"
}]

或者

父母->

[{
"id":1,
"name": "parent1",
"childs":[{
   "id":10
   },
   {
   "id":18
   }]
}]

有单独的孩子->

[{
"id":10
}]

那么,你能帮我解决这个问题吗?可以像我想要的那样在单独的请求中同时实现案例 1 和 2?

谢谢你。

标签: jsonserializationgson

解决方案


推荐阅读