【问题标题】:Hibernate Bidirectional Mapping Results in Cycle when using converter for DTO将转换器用于 DTO 时,休眠双向映射会导致循环
【发布时间】:2021-01-15 15:34:14
【问题描述】:

我将类映射如下:

@ManyToOne(fetch = FetchType.LAZY,cascade = CascadeType.ALL)
@JoinColumn(name = "CATEGORY_ITEMS_ID")
private CategoryItem categoryItem;

@OneToMany(mappedBy="categoryItem",cascade = CascadeType.ALL, orphanRemoval = true)
private List<CategoryRating> categoryRatingList;

但是当我需要将表格模型转换为 dto 时,我陷入了一个循环:

 target.setCategoryRatingDtoList(categoryRatingConverter.convert(source.getCategoryRatingList()));

 target.setCategoryItemDto(categoryItemConverter.convertToDto(source.getCategoryItem()));

两个转换器最终互相调用。

我需要结果为:

CategoryItems 列表,其中每个 CategoryItems 对象都包含相关 CategoryRatings 的列表

我应该如何解决这个问题?也许我在错误的意义上使用了双向映射。无论如何,请提供您对此问题的意见和可能的解决方案

【问题讨论】:

    标签: java hibernate jpa java-ee-6


    【解决方案1】:

    您有 3 个选项。

    您可以在其构造函数中引入一个上下文并将对象注册到该上下文。当另一个对象在它的构造函数中时,它可以通过该上下文接收一个飞行列表/对象,从而以这种方式解决循环。

    另一种选择是使 DTO 可变并首先实例化对象并将它们注册到上下文中,然后再设置对象的状态。这与第一个解决方案类似,只是 DTO 类不需要了解上下文。

    第三种解决方案是通过使用更简单的转换器来避免循环,例如CategoryItemConverter 中的CategoryRating 只转换部分数据,而不是categoryRatings 列表。

    【讨论】:

      猜你喜欢
      • 2011-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多