ModelMapper-转换失败:无法将org.hibernate.collection.internal.PersistentBag转换为java.util.ArrayList。

8

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);

我得到了:
  1. 转换器org.modelmapper.internal.converter.MergingCollectionConverter@969b4391无法将org.hibernate.collection.internal.PersistentBag转换为java.util.ArrayList。
1个回答

1

深入查看堆栈跟踪:最后一个映射问题通常是更具可操作性的问题。

可能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中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接