从HashSet到Arraylist的推土机映射
问题描述:
我正在尝试使用推土机映射将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的?
我是新来的推土机映射,因此也无法定义自定义转换器。
推土机文件说,它可以转换一个集列出
推土机集合类型之间自动映射,并自动执行任何类型转换。
下集合映射自动推土机处理:(这些都是>>所有双向):
设置为列表
答
试试这个: -
首先定义一个自定义转换器:
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>
感谢了很多。有用。 :) – user2332505