2016-02-29 7 views
4

Учитывая набор из четырех объектов, как:Mapstruct: Отображение нескольких исходных объектов для подобъектов

A{String one, B b} 

B{String two, String three} 

C{String one, String two} 

D{String three} 

Я хочу, чтобы создать отображение типа:

A cAndDToA(C c , D d); 

Я не могу себе найти способ для заполнения B внутри A с данными из C и D.

Кто-нибудь знает решение этой проблемы или имеет лучший подход?

ответ

3

Вы можете определить способ заполнения B от C и D:

B cAndDToB(C c, D d); 

И затем вызвать это вручную через decorator на cAndDToA:

@Mapper(decoratedWith=MyMapperDecorator.class) 
public interface MyMapper { 
    A cAndDToA(C c, D d); 
    B cAndDToB(C c, D d); 
} 

public abstract class MyMapperDecorator implements MyMapper { 

    private final MyMapper delegate; 

    public MyMapperDecorator(PersonMapper delegate) { 
     this.delegate = delegate; 
    } 

    @Override 
    public A cAndDToA(C c, D d) { 
     A a = delegate.cAndDToA(c, d); 
     a.setB(cAndDToB(c, d); 

     return a; 
    } 
} 

Мы предлагаем поддержку nested mappings на целевая сторона тоже. Но мы еще не там :)

+0

Работал как шарм, спасибо за предложение. На данный момент я очень впечатлен этой библиотекой и с нетерпением жду реализации этих вложенных сопоставлений. – Ghen