题
我正在努力获得 推土机 屈服于我的意志,我觉得应该很简单。我有两个类似的模型,我希望在之间映射,但是一个比另一个模型具有“更深的”层次结构,这使我在处理收藏时会有问题。考虑以下课程:
来源类:
class Foo {
String id;
NameGroup nameGroup;
// Setters/Getters
}
class NameGroup {
private List<Name> names;
// Setters/Getters
}
class Name {
private String nameValue;
// Setters/Getters
}
目标类:
class Bar {
private String barId;
private BarNames barNames;
// Setters/Getters
}
class BarNames {
private List<String> names;
// Setters/Getters
}
现在我想要以下单向映射:
Foo.id -> Bar.barId // Simple enough
但是我需要:
Foo.nameGroup.names.nameValue -> Bar.barNames.names
所以每个人 Name
实例IN Foo.nameGroup.names
应该导致 String
被添加到 BarNames.names
列表。这可能吗?
解决方案
只要您的“名称”类包含一个字符串构造函数,就可以轻松地使用推土机完成。
推土文档的报价(http://dozer.sourceforge.net/documentation/simpleproperty.html):
数据类型覆盖物是由推土机映射引擎自动执行的。目前,推土机支持以下类型的转换类型:(这些都是双向的)
...
字符串到复杂类型如果复杂类型包含字符串构造函数
...
我已经在您的课程中对此进行了测试(我遇到了同样的问题),而且效果很好。这是我使用的映射:
<mapping>
<class-a>com.test.bar.Bar</class-a>
<class-b>com.test.foo.Foo</class-b>
<field>
<a>barId</a>
<b>id</b>
</field>
<field>
<a>barNames.names</a>
<b>nameGroup.names</b>
<a-deep-index-hint>java.lang.String</a-deep-index-hint>
<b-deep-index-hint>com.test.foo.Name</b-deep-index-hint>
</field>
</mapping>
不隶属于 StackOverflow