次のマッパーを使用してエンティティをマップしています:
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);
}
コレクションとしてマップされたエンティティの「データ」フィールドのみを無視する必要があります。ただし、@Mapping
は単一のエンティティに対してのみ機能するようです。また、生成されたメソッドassigmentFilesToAssigmentFileDTOs
がforループでassigmentFileToAssigmentFileDTO
を使用するだけであることにも気付きました。そのための解決策はありますか?
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
を使用して、独自の注釈を定義することもできます
あなたはより多くの情報を見つけることができます ここでドキュメント 。