jpa lazy return 所有元素

jpa lazy return all element

我有两个 class 品牌和型号。我用懒加载。

@Entity
public class Brand {

  @Id
  @GeneratedValue(strategy = GenerationType.AUTO)
  private long brandId;

  private String brand;

  @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "brand")
  @JsonManagedReference
  private List<Model> modelList;
  ...
}

@Entity
public class Model {

  @Id
  @GeneratedValue(strategy = GenerationType.AUTO)
  private long modelId;

  private String model;

  @ManyToOne
  @JoinColumn(name = "brandId")
  @JsonBackReference
  private Brand brand;
  ...
}

在我的存储库中,我使用标准方法 findAll。

public interface BrandRepository extends JpaRepository<Brand, Long>

当我打电话给 Brand

卷曲http://localhost:8080/brands

我也有模型

[
{
"brandId":1, "brand":"Toyota", "modelList":[
{
"modelId":1, "model":"Echo" }, {
"modelId":2, "model":"Corolla" } ] }, {
"brandId":2, "brand":"Honda", "modelList":[
{
"modelId":3, "model":"Civic" }, {
"modelId":4, "model":"Accord" } ] }, {
"brandId":3, "brand":"Kia", "modelList":[
{
"modelId":5, "model":"Sorento" } ] }, {
"brandId":4, "brand":"Ford", "modelList":[
{
"modelId":6, "model":"Mustang" } ] } ]

是不是少了什么?

如果您想省略 Brand 中的模型,您应该将 @JsonBackReference 放在 modelList 上,而不是 @JsonManagedReference

@JsonManagedReference 是引用的前向部分——正常序列化的部分。

@JsonBackReference是reference后面的部分,连载时会省略。

希望对您有所帮助。