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

Ali*_*our 8 java spring json hibernate jackson

我正在使用spring框架,Hibernate和JSON开发rest web app.请假设我有两个实体,如下所示:

BaseEntity.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;
    }
}
Run Code Online (Sandbox Code Playgroud)

University.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
    }
Run Code Online (Sandbox Code Playgroud)

Student.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
        }
Run Code Online (Sandbox Code Playgroud)

当我打电话给我的休息api列出大学的时候,每件事情都按照我的预期正常工作,但是当我打电话给我的休息api时,我急切地希望我的JSON回应是

[
   {
    "id": 1,
    "stuName": "st1",
    "university": {
        "id": 1,
        "uniName": "uni1"
                 }
    },
    {
        "id": 2,
        "stuName": "st2",
        "university": 1
    }
]
Run Code Online (Sandbox Code Playgroud)

但我希望的回答是:

[
    {
        "id": 1,
        "stutName": "st1",
        "university": 
        {
         "id": 1,
        "uniName": "uni1"
        }
    },
    {
        "id": 2,
        "stutName": "st2",
        "university": 
        {
         "id": 1,
        "uniName": "uni1"
        }
    }
Run Code Online (Sandbox Code Playgroud)

更新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;
Run Code Online (Sandbox Code Playgroud)

json响应仍然相同,我需要上面提到的我想要的响应.

谢谢

Sac*_*141 1

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


归档时间:

查看次数:

4970 次

最近记录:

7 年,9 月 前