问题描述
我已将类映射如下:
@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 列表
我该如何解决这个问题?也许我在错误的意义上使用双向映射。无论如何,请提供您对此问题的意见和可能的解决方案
解决方法
您有 3 个选择。
您可以引入一个上下文并在其构造函数中将对象注册到该上下文。当另一个对象在它的构造函数中时,它可以通过该上下文接收一个飞行列表/对象,从而以这种方式解决循环。
另一种选择是使 DTO 可变并首先实例化对象并将它们注册到上下文中,然后再设置对象的状态。这与第一个解决方案类似,只是 DTO 类不需要了解上下文。
第三个解决方案是通过使用更简单的转换器来避免循环,例如CategoryRating
中的 CategoryItemConverter
仅转换某些数据,而不转换 categoryRatings
列表。