2016-09-24 115 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