java - ModelMapper - 无法将 org.hibernate.collection.internal.PersistentBag 转换为 java.util.ArrayList
问题描述
ModelMapper 配置应该如何?
编译组:'org.modelmapper',名称:'modelmapper',版本:'2.3.8'
目前我有:
modelMapper = new ModelMapper();
modelMapper.getConfiguration()
.setMatchingStrategy(MatchingStrategies.STANDARD)
.setFieldMatchingEnabled(true)
.setFieldAccessLevel(Configuration.AccessLevel.PRIVATE);
我的实体有
@OneToMany(mappedBy = "employee", cascade = CascadeType.ALL, orphanRemoval = true)
private List<Phones> phones = new ArrayList<>();
我的第二个实体:
@ManyToOne
@JoinColumn(name = "employee_id")
private Employee employee;
我想要拥有的 DTO:
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor(force = true)
public class EmployeeDTO {
@Singular
private final List<PhoneDTO> phones;
}
我以这种方式映射这个:
EmployeeDTO.EmployeeDTOBuilder employeeDTOBuilder
= ObjectMapperUtils.map(employee, EmployeeDTO.employeeDTOBuilder.class);
我越来越:
- 转换器 org.modelmapper.internal.converter.MergingCollectionConverter@969b4391 未能将 org.hibernate.collection.internal.PersistentBag 转换为 java.util.ArrayList。
解决方案
深入了解堆栈跟踪:最后一个映射问题通常更可操作。
也许PhoneDTO
不可映射?如果是这样,您需要创建一个转换器并告诉模型映射器,如下所示:
public class PhoneConverter extends AbstractConverter<PhoneEntity, PhoneDto>
{
private final StrictModelMapper strictModelMapper;
@Override
public PhoneDto convert(@NonNull final PhoneEntity source)
{
PhoneDto phoneDto = new PhoneDto();
strictModelMapper.map(source, phoneDto);
return phoneDto;
}
}
并将其添加到modelMapper
.
推荐阅读
- botframework - 将此消息发送到您的机器人时出错:HTTP 状态代码已禁止
- reactjs - React 中的 404 页面在每个页面中呈现
- python - 如何使用 Odoo 9 中 ORM API 的 search() 方法根据创建记录日期获取模型的最新记录?
- ruby-on-rails - 双has_many关联只返回第二个关联之一
- daterangepicker - Daterangepicker 最小日期
- css - 伪选择器:主机未“编译”
- javascript - 如何在输入字段中填充所选选项
- python - 无法从 Heroku 上的 Django 连接到 SQL Server
- dataframe - 按时间戳绘制具有排序的 DataFrame 字段的多行
- c++ - 在静态库中存储线程 ID 的正确方法