2012-06-29 40 views
4

如何将单个字段映射到推土机中的List/Collection推土机:将单个字段映射到列表中

class SrcFoo { 
    private String id; 
    private List<SrcBar> bars; 
} 

class SrcBar { 
    private String name; 
} 

这里是我的目标对象:

class DestFoo { 
    private List<DestBar> destBars; 
} 

class DestBar { 
    private String fooId; // Populated by SrcFoo.id 
    private String barName; 
} 

我希望所有DestBar.fooId(DestBars的整个列表)与SrcFoo.id

这个问题是类似这样的张贴在这里被填充,期望我想将单个字段映射到列表中的每个项目。 Dozer: map single field to Set

我尝试了以下操作,但它仅填充了列表中第一项的DestBar.fooId

<mapping> 
    <class-a>SrcFoo</class-a> 
    <class-b>DestFoo</class-b> 
    <field> 
     <a>bars</a> 
     <b>destBars</b> 
    </field> 
    <field> 
     <a>id</a> 
     <b>destBars.fooId</b> <!-- same affect as destBars[0].fooId ? --> 
    </field> 
</mapping> 

回答

3

推土机不支持该类型的映射。为了做这种类型的映射,你必须知道你的集合上的索引(静态映射)。 这对于一个自定义转换作业,创建字符串的转换像这样列表(的DestBar):

public class YourConverter extends DozerConverter<String, List> 

实现你的转换器映射逻辑(只需设置在需要字符串ID)和配置推土机像这样的文件:

<mapping> 
    <class-a>SrcFoo</class-a> 
    <class-b>DestFoo</class-b> 
    ... 
    <field custom-converter="yourpackage.YourConverter"> 
     <a>id</a> 
     <b>destBars</b> 
    </field> 
</mapping>