【问题标题】:ModelMapper - failed to convert org.hibernate.collection.internal.PersistentBag to java.util.ArrayListModelMapper - 无法将 org.hibernate.collection.internal.PersistentBag 转换为 java.util.ArrayList
【发布时间】:2020-09-03 06:42:43
【问题描述】:

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。

【问题讨论】:

    标签: java hibernate modelmapper


    【解决方案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

    【讨论】:

      猜你喜欢
      • 2015-07-16
      • 2017-06-03
      • 2017-10-29
      • 2020-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-22
      相关资源
      最近更新 更多