2017-10-18 9 views
-1

は、私はこのようなマッピングを持っている:JavaのMapStructコレクション・マッピング

@Mappings({ 
    @Mapping(target = "....", source = "..."), 
    @Mapping(target = "....", source = "..."), 
    @Mapping(target = "server", source = "server") // Added for clarity 
}) 
MyDTOClass mapMyEntity(MyEntityClass myEntityClass, Server server); 
List<MyDTOClass> mapMyEntity(List<MyEntityClass> myEntityClass, Server server); 

私は、データベースからデータを取得する場合、私はエンティティのリストを取得します。同じServerオブジェクトインスタンスをリスト内のすべてのDTOインスタンスにマップする必要があります。

MapStructは、がこのユースケースでは冗長であると予想しています。

これは私が何をしたいの擬似コードです:

これを達成することができる方法
Server server = ....; 
List<MyDTOClass> myDTOClassList = new ArrayList<MyDTOClass>(); 
for(MyEntityClass myEntityClass:List<MyEntityClass>) 
{ 
    MyDTOClass myDTOClass = new myDTOClass(); 
    //My standard mappings 
    myDTOClass.setXXX(myEntityClass.getXXX()); 
    ... 
    ... 
    //My special mapping applicable for all objects in list 
    myDTOClass.setServer(server); 
    myDTOClassList.add(myDTOClass); 
} 

+0

あなたの質問は本当に明確ではありません。あなたは正確に何を地図にしようとしていますか? 'List 'はどこから来たのですか? – Filip

+0

私の基本的なマッピングは、コレクションに拡張したいMyDTOClass mapMyEntityです。ただし、リストのすべてのインスタンスに同じサーバーオブジェクトを添付します。疑似コードを追加しました。今はっきりしていることを願っています。 – user1880957

答えて

1

新しい@Context1.2から使用すると、これを実現できます。および@AfterMapping

@Mapper 
public interface MyMapper { 


    MyDTOClass mapMyEntity(MyEntityClass myEntityClass, @Context Server server); 

    List<MyDTOClass> mapMyEntity(List<MyEntityClass> myEntityClass, @Context Server server); 

    @AfterMapping 
    default void afterMapping(@MappingTarget MyDTOClass target, @Context Server server) { 
     target.setServer(server); 
    } 
} 
関連する問題