gpt4 book ai didi

java - 如何使用 JPA+Hibernate 在 json 结果中包含连接列

转载 作者:行者123 更新时间:2023-11-30 10:16:56 24 4
gpt4 key购买 nike

我有一个如下所示的 Province 类:

public class Province {

@Id
Long id;

@Column(nullable = false)
String name;

@JsonManagedReference
@OneToMany(mappedBy = "province")
List<City> cities;

}

和如下所示的 City 类:

public class City{
@Column(nullable = false)
String name;

@JsonBackReference
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "province_id")
Province province;

}

现在我想在 REST 结果中的 City 的 JSON 结果中包含 pronivce_id(作为 int 值而不是对象)。

我该怎么做?

最佳答案

您可以使用 JsonIdentityInfoJsonIdentityReference Jackson 注释返回 province_id

public class City {
@Column(nullable = false)
String name;

@JsonProperty("province_id")
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id")
@JsonIdentityReference(alwaysAsId = true)
@ManyToOne
@JoinColumn(name = "province_id")
Province province;

}

这个问题与 Hibernate + JPA 无关。您只需要正确映射 province 对象即可。但是你会遇到一些问题:
1)懒加载问题。要映射所有省份 ID,您需要将它们加载到内存中。所以你不能使用 fetch = LAZY 并且如果映射不正确,它将导致 N+1 获取问题。
2)这个JSON映射将应用于序列化和反序列化。因此,如果您不仅要将此实体用作查询 POJO(用于 JSON View 等),而且还用于命令对象(例如:用于创建和更新)- 您需要将省份对象作为 id领域,而不是一个对象。

关于java - 如何使用 JPA+Hibernate 在 json 结果中包含连接列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49832919/

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