エンティティをマップするために次のマッパーを使用しています:
public interface AssigmentFileMapper {
AssigmentFileDTO assigmentFileToAssigmentFileDTO(AssigmentFile assigmentFile);
AssigmentFile assigmentFileDTOToAssigmentFile(AssigmentFileDTO assigmentFileDTO);
@Mapping(target = "data", ignore = true)
List<AssigmentFileDTO> assigmentFilesToAssigmentFileDTOs(List<AssigmentFile> assigmentFiles);
List<AssigmentFile> assigmentFileDTOsToAssigmentFiles(List<AssigmentFileDTO> assigmentFileDTOs);
}
コレクションとしてマップされたエンティティに対してのみ、「データ」フィールドを無視する必要があります。ただし、単一のエンティティに対してのみ機能するようです。また、生成されたメソッドは for ループ内でのみ使用される@Mapping
ことに気付きました。これに対する解決策はありますか?assigmentFilesToAssigmentFileDTOs
assigmentFileToAssigmentFileDTO
ベストアンサー1
MapStructは、コレクションマッピングに見つかった割り当てを使用します。目的を達成するには、フィールドをdata
明示的に無視するカスタムメソッドを定義し、@IterableMapping(qualifiedBy)
または@IterableMapping(qualifiedByName)
必要な方法を選択します。
マッパーは次のようになります。
public interface AssigmentFileMapper {
AssigmentFileDTO assigmentFileToAssigmentFileDTO(AssigmentFile assigmentFile);
AssigmentFile assigmentFileDTOToAssigmentFile(AssigmentFileDTO assigmentFileDTO);
@IterableMapping(qualifiedByName="mapWithoutData")
List<AssigmentFileDTO> assigmentFilesToAssigmentFileDTOs(List<AssigmentFile> assigmentFiles);
List<AssigmentFile> assigmentFileDTOsToAssigmentFiles(List<AssigmentFileDTO> assigmentFileDTOs);
@Named("mapWithoutData")
@Mapping(target = "data", ignore = true)
AssignmentFileDto mapWithouData(AssignmentFile source)
}
使用すべきorg.mapstruct.Named
こうすることで、この動作は実現できます。また、javax.inject.Named
次のようにして独自の注釈を定義することもできます。org.mapstruct.Qualifier
詳細情報はこちらのドキュメント。