推土机将对象映射到

时间:2018-04-16 16:46:59

标签: java dozer

我有两个单独的对象要映射:

Class A {
    List<AA> listAA;
    // get set methods...
}

Class B{
    C objectC = new C();
    // get set methods...
}

Class C{
    List<CC> listCC;
    // get set methods...
}

Class AA{
    String aa;
    // get set methods...
}

Class CC{
     String cc;
    // get set methods...
}

所以我想把listAA映射到C里面的listCC。用C把B作为父母。

我尝试将其描述为数据结构:

a.listAA -> b.c.listCC 

到目前为止,我已经尝试过:

<mappings>
    <mapping>
        <class-a>mypackages.A</class-a>
        <class-b>mypackages.B</class-b>
        <field>
            <a>listAA</a>
            <b>objectC.listCC</b>
            <b-hint>mypackages.CC</b-hint>
        <field>
    </mapping>

    <mapping>
        <class-a>mypackages.AA</class-a>
        <class-b>mypackages.CC</class-b>
        <field>
            <a>aa</a>
            <b>cc</b>
        <field>
    </mapping>
</mappings>

我认为推土机不知道

objectC.listCC

作为Object中的列表。而是试图找到名为'objectC.listCC'的属性。

它抛出

 NullPointerException
    at org.dozer.util.ReflectionsUtils.invoke(ReflectionsUtils)
    ...

有没有人知道如何解决这个问题。

此致

伊万

PS:我希望我能清楚地描述它

1 个答案:

答案 0 :(得分:1)

有时你必须出去忘记寻找答案,然后重新回头。 我将映射配置扩展为三个部分。因为推土机无法将对象映射到大型子对象。所以你必须像链映射一样:

 <mappings>
    <mapping>
        <class-a>mypackages.A</class-a>
        <class-b>mypackages.B</class-b>
        <field map-id="listAAToObjectC">
            <a>listAA</a>
            <b>objectC</b>
            <b-hint>mypackages.C</b-hint>
        <field>
    </mapping>
    <mapping map-id="listAAToObjectC">
        <class-a>mypackages.A</class-a>
        <class-b>mypackages.C</class-b>
        <field map-id="listToList">
            <a>listAA/a>
            <b>listCC</b>
        <field>
    </mapping>
    <mapping map-id="listToList">
        <class-a>mypackages.AA</class-a>
        <class-b>mypackages.CC</class-b>
        <field>
            <a>aa</a>
            <b>cc</b>
        <field>
    </mapping>
</mappings>