Отображение бульдозера из родительского поля во вложенное/дочернее поле

Я борюсь за отображение бульдозера для вложенного объекта. Я хочу сопоставить поле объекта с полем этого дочернего объекта. например, у меня есть эти классы.

class Parent {
    private Child child;
    private Long childId;

    // setter - getter
}

class Child {
    private Long id;

    // setter - getter
}

и мое отображение:

</mappings>
<configuration>
    <map-null>false</map-null>
</configuration>
<mapping>
    <class-a>com.indraep.Parent</class-a>
    <class-b>com.indraep.Parent</class-b>

    <field>
        <a>childId</a>
        <b>child.id</b>
    </field>
</mapping>
</mappings>

С помощью этой настройки я не могу сопоставить Parent.childId с Parent.child.id.

Однако это работает, если я попробую противоположную карту от Parent.child.id до Parent.childId, используя это сопоставление:

<field>
    <a>childId</a>
    <b>child.id</b>
</field>

Любая идея, как решить эту проблему? или это невозможно сделать с бульдозером?


person indraep    schedule 01.06.2017    source источник


Ответы (1)


Я нашел решение, добавив это поле для исключения конфигурации:

<field-exclude>
    <a>child</a>
    <b>child</b>
</field-exclude>

из журнала кажется, что dozer сопоставил Parent.childId -> Parent.child.id, но на следующем шаге он переопределяется Parent.child -> Parent.child, поэтому Parent.child становится нулевым.

Другая проблема заключается в том, что если в классе Child есть некоторые другие поля, и мне также нужно их сопоставить (кроме child.id, который сопоставляется с Parent.childId), как это решить?

person indraep    schedule 01.06.2017