我正在努力获得 推土机 屈服于我的意志,我觉得应该很简单。我有两个类似的模型,我希望在之间映射,但是一个比另一个模型具有“更深的”层次结构,这使我在处理收藏时会有问题。考虑以下课程:

来源类:

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>
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top