2016-09-24 116 views
0

我正在尝试使用推土机映射将PO对象的哈希集映射到模型对象中。从HashSet到Arraylist的推土机映射

这是我的源和目的类: -

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

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

NoteVariableDefinitionPOImpl类:

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: [[email protected]] 
    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 

如何映射一个HashSet在这种情况下ArrayList的?

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

推土机文件说,它可以转换一个集列出

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

下集合映射自动推土机处理:(这些都是>>所有双向):

设置为列表

回答

3

试试这个: -

首先定义一个自定义转换器:

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> 
+0

感谢了很多。有用。 :) – user2332505