当前位置: 首页 > 知识库问答 >
问题:

从HashSet到Arraylist的Dozer映射

傅嘉悦
2023-03-14

我正在尝试使用dozer映射将哈希集从PO对象映射到模型对象中的列表。

这是我的源和目标类:-

 public class Source implements Serializable {
   Set<NoteVariableDefinitionPOImpl> noteVariableDefinitionPO = new HashSet<NoteVariableDefinitionPOImpl>();
 }

public class Destination implements Serializable {
 List<NoteVariableDefinition> noteVariableDefinition = new ArrayList<NoteVariableDefinition)();

注意变量定义POImpl类:

 class NoteVariableDefinitionPOImpl {
  int x;  // setter + getter
 }

NoteVariableDefinition类:

 class NoteVariableDefinition {
  int y ; 
  // setter + getter
 }

我的推土机映射配置为:

 <mapping wildcard="false" map-id="NC.Source.Destination" map-null="false">
    <class-a>test.Source</class-a>
    <class-b>test.Destination</class-b> 

    <field map-id="NC.NoteVariableDefinitionPOImpl.NoteVariableDefinition">
        <a>noteVariableDefinitionPO</a>
        <b>noteVariableDefinition</b>
        <a-hint>java.util.HashSet</a-hint>
        <b-hint>java.util.ArrayList</b-hint>
    </field>
</mapping>


<mapping wildcard="false"
    map-id="NC.NoteVariableDefinitionPO.NoteVariableDefinition" type="one-way" map-null="false">
    <class-a>com.test.po.impl.NoteVariableDefinitionPOImpl</class-a> 
    <class-b>com.test.model.NoteVariableDefinition</class-b>
    <field>
        <a>x</a>
        <b>y</b>
    </field>
</mapping>

每当运行此映射时,总会出现以下错误:

  MapId: NC.NoteVariableDefinitionPO.NoteVariableDefinition
  Type: null
  Source parent class: test.Source
  Source field name: noteVariableDefinitionPO
  Source field type: class java.util.HashSet
  Source field value:   [com.test.po.impl.NoteVariableDefinitionPOImpl@e21649a8]
  Dest parent class: test.Destination
  Dest field name: noteVariableDefinition
  Dest field type: java.util.List
  org.dozer.MappingException: Class mapping not found by map-id: SRC-CLASS-    com.test.po.impl.NoteVariableDefinitionPOImpl DST-CLASS-java.util.ArrayList MAP-ID->NC.NoteVariableDefinitionPO.NoteVariableDefinition

在这种情况下,如何将哈希集映射到ArrayList?

我是推土机映射的新手,因此也无法定义自定义转换器。

推土机文档说明它可以将集合转换为列表

推土机自动在收集类型之间映射,并自动执行任何类型转换。

以下集合映射由推土机自动处理:(这些是

设置为列表

共有1个答案

欧博简
2023-03-14

尝试以下操作:-

首先定义自定义转换器:

package com.test.converter;

public class Converter extends DozerConverter<Set, List> {

   @Autowired
   Mapper mapper;

   public Converter() {
    super(Set.class, List.class);
   }

    @Override
    public List convertTo(Set noteVariableDefinitionPO, List   noteVariableDefinition) {
        //iterate set
        NoteVariableDefinition mappedValue = mapper
                .map(noteVarDefinitionPO,
                        NoteVariableDefinition.class,
                        mappingID);
         // add it to list and return
  }

  @Override
  public Set convertFrom(List arg0, Set arg1) {
    return null;
  }

}

然后定义以下全局配置:

  <mappings>
    <configuration>
       <custom-converters>
          <converter type= "com.test.converter.Converter"  (path to custom converter)>
               <class-a>java.util.Set </class-a>
               <class-b>java.util.List </class-b>
          </converter>
      </custom-converters>
   </configuration>
</mappings>

并将您的字段值更改为:

   <field map-id="NC.NoteVariableDefinitionPO.NoteVariableDefinition"
        custom-converter= "com.test.converter.Converter" (path to custom  converter)>
        <a>noteVariableDefinitionPO</a>
        <b>noteVariableDefinition</b>
        <a-hint>java.util.HashSet</a-hint>
        <b-hint>java.util.ArrayList</b-hint>
    </field>
 类似资料:
  • 问题内容: 因此,我有一个自定义班级班级,该班级将有一组其他自定义班级的学生。因此它将看起来像这样: 现在,我将向集合中的学生添加和删除许多学生,并且还将改变已经在集合中的学生的许多私有字段。 问题:应该使用哪种数据结构来最好地实现此目的?由于我将更改set Student中Student对象的属性(从而更改哈希码),因此我应该改用ArrayList吗? 问题答案: 我应该使用哪种数据结构来最好地

  • 我在Java中有以下: 我想将它的数据移动到: 有可能那样做吗?

  • 对于我的数据模型,它基本上是一个包含父子树的树,Dozer在将字段(使用接口类型作为参数)解释为类并尝试使用构造函数实例化时,遇到了成功映射它们的问题。这导致以下例外情况:; 这是一个相同的类映射,虽然Dozer正确地将源类上的父字段标识为Datawarehouse类型,但由于其父类的模块类上的set方法使用模型接口作为其参数,它似乎试图实例化模型类型,这当然会失败,因为模型是一个没有构造函数的接

  • 我的任务是实现一个蛮力算法来输出一些n的整数[1,2,…, n]的所有排列。但是,我似乎在将ArrayList对象添加到HashSet时遇到了一些问题: 我发现对“nextPer的连续调用确实找到了所有排列,但是我不明白当我将排列添加到HashSet“allPer的排列”时会发生什么。我在n=3的情况下运行时得到的输出是这样的: [[3, 2, 1, 1, 2, 1, 1, 3, 1, 2], [

  • 我有基类orderItem并且有子类DeviceItem和ServiceItem。我提供了下面的定义。当我收到这个请求时,我执行dozer映射以将jaxb模型转换为我创建的另一个数据模型。我的数据模型也有相同的OrderItem、DerviceItem和DeviceItem类,它们是POJO。当我进行dozer映射时,类会映射到OrderItem(基类)而不是专门的子类。有没有办法执行此用户doz

  • 我有两个数据集,让我们考虑从JAXb转换器生成的数据A和数据B。检查以下代码段, 这些是生成的JaxB对象,带有getter[for all] /setter[for nonCollection field](在上面的代码中没有提到)。当我尝试使用Dozer API映射时,只有父对象被映射,但在映射集合时会得到空指针异常。 尝试了以下映射方法来解决映射问题, 但上述方法的缺陷在于,如果对象包含嵌套