MapStruct: Carte de la Liste des objets, lorsque l'objet est mappé à partir de deux objets
Supposons que j'ai une telle cartographie:
@Mapping(source = "parentId", target = "parent.id")
Child map(ChildDto dto, Parent parent);
Maintenant, j'ai besoin de la Liste des cartes de ChildDto à la Liste de l'Enfant, mais ils ont tous la même mère. J'attends de faire quelque chose comme ça:
List<Child> map(List<ChildDto> dtoList, Parent parent);
Mais il n'a pas de travail.
Est-il possible de le faire?
OriginalL'auteur AlexB | 2016-05-16
Vous devez vous connecter pour publier un commentaire.
J'ai trouvé comment la mettre en œuvre avec les décorateurs, merci @Gunnar
Voici une mise en œuvre:
Haricots
Mappeur
Décorateur
- Je utiliser
abstract class
, pasinterface
pour mapper, parce que dans le cas deinterface
on ne pouvait pas exclure pour la méthode de génération demap(List<Child> children, Parent parent)
, et le code généré n'est pas valide au moment de la compilation.OriginalL'auteur AlexB
Ce n'est pas possible de sortir de la zone des choses. Vous pouvez utiliser un décorateur ou après-méthode de cartographie pour définir le parent de tous les objets enfants par la suite.
OriginalL'auteur Gunnar
J'ai utilisé un
@AfterMapping
comme suggéré par Gunnar:@AfterMapping
public void afterDtoToEntity(final QuestionnaireDTO dto, @MappingTarget final Questionnaire entity) {
entity.getQuestions().stream().forEach(question -> question.setQuestionnaire(entity));
}
Ce fait que toutes les questions ont été liés à la même questionnaire entité. C'était la dernière partie de la solution pour éviter la JPA erreur
save the transient instance before flushing
sur la création d'une nouvelle entité mère avec une liste d'enfants.OriginalL'auteur Stephanie