我正在尝试使用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?
我是推土机映射的新手,因此也无法定义自定义转换器。
推土机文档说明它可以将集合转换为列表
推土机自动在收集类型之间映射,并自动执行任何类型转换。
以下集合映射由推土机自动处理:(这些是
设置为列表
尝试以下操作:-
首先定义自定义转换器:
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映射时,只有父对象被映射,但在映射集合时会得到空指针异常。 尝试了以下映射方法来解决映射问题, 但上述方法的缺陷在于,如果对象包含嵌套