gpt4 book ai didi

java - 使用hibernate jpa进行JSON序列化和反序列化以在JSON响应中将父对象转换为子对象

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:46:13 25 4
gpt4 key购买 nike

我正在使用 spring 框架、Hibernate 和 JSON 开发 rest web 应用程序。请假设我有两个如下所示的实体:

基础实体.java

@MappedSuperclass
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class,property = "id" )
public abstract class BaseEntity implements Serializable {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
public long getId() {
return id;
}
}

大学.java

 public class University extends BaseEntity {

private String uniName;

@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER,orphanRemoval = true)
@JoinColumn(name = "university_id")
private List<Student> students=new ArrayList<>();
// setter an getter
}

学生.java

    public class Student extends BaseEntity{

private String stuName;

@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "university_id",updatable = false,insertable = false)
private University university;

// setter an getter
}

当我调用我的休息 api 列出大学时,一切都按我预期的那样工作正常,但是当我调用我的休息 api 急切地列出学生时,我的 JSON 响应是

[
{
"id": 1,
"stuName": "st1",
"university": {
"id": 1,
"uniName": "uni1"
}
},
{
"id": 2,
"stuName": "st2",
"university": 1
}
]

但我想要的回应是:

[
{
"id": 1,
"stutName": "st1",
"university":
{
"id": 1,
"uniName": "uni1"
}
},
{
"id": 2,
"stutName": "st2",
"university":
{
"id": 1,
"uniName": "uni1"
}
}

更新 1:我的 hibernate 注释工作正常我有 JSON 问题

要求:

  1. 我急需双方获取(大学方面可以)

  2. 我需要在学生端为每个学生提供大学对象(当我急切地获取学生时)

我需要什么样的序列化或 JSON 配置来匹配我想要的响应?

更新 2:

通过删除 @JsonIdentityInfo 并像下面这样编辑学生端:

@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "university_id",updatable = false,insertable = false)
@JsonIgnoreProperties(value = "students", allowSetters = true)
private University university;

json 响应仍然相同我需要上面提到的期望的响应。

谢谢

最佳答案

从基类中删除 @JsonIdentityInfo,这会导致大学对象仅序列化 id。

关于java - 使用hibernate jpa进行JSON序列化和反序列化以在JSON响应中将父对象转换为子对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46684015/

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