получить сущность из картографа с несколькими сущностями - PullRequest
0 голосов
/ 05 января 2019

Предположим, у вас есть две сущности, определяющие объекты в базе данных Ent1 и Ent2, и DTO, описывающие две в одной.
Мой Mapper с MapStruct EntitiesDtoMapper выглядит так:

@Mapper
interface EntitiesDtoMapper{
    DTO EntitiesToDto(Ent1 ent1, Ent2 ent2);
    //It is possible to do this?
    Ent1 DtoToEnt1(DTO dto);
}

Мне нравится получать Ent1 и Ent2 из DTO, это возможно?

Ответы [ 2 ]

0 голосов
/ 07 января 2019

кому интересно; это возможно, но будьте осторожны с именами параметров сущностей.
Вот пример:

@Data @Entity
public class Ent1{
  public Ent1() {}
  String id;
  String name;
}

@Data @Entity
public class Ent2{
  public Ent2() {}
  String id;
  String name;
}

@Data
@ToString
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class DTO{
  String id1,id2,name1,name2;
}

@Mapper
public interface EntitiesDtoMapper{  

  EntitiesIcspDtoMapper INSTANCE = Mappers.getMapper(EntitiesDtoMapper.class);

  @Mappings({
    @Mapping(source="ent1.id", target = "id1"),
    @Mapping(source="ent1.name", target = "name1"),
    @Mapping(source="ent2.id", target = "id2"),
    @Mapping(source="ent2.name", target = "name2")
  })
  DTO EntitiesToDto(Ent1 ent1, Ent2 ent2);

  @Mappings({
    @Mapping(source="id1", target = "id"),
    @Mapping(source="name1", target = "name"),
  })
  Ent1 DtoToEnt1(DTO dto);

  @Mappings({
    @Mapping(source="id2", target = "id"),
    @Mapping(source="name2", target = "name"),
  })
  Ent2 DtoToEnt2(DTO dto); 

}
0 голосов
/ 05 января 2019

Я полагаю, что разделение одного DTO на два объекта, если они не встроены, не является наилучшей практикой. Если это так, я предлагаю сопоставить dto на две сущности вручную, потому что это самый простой и быстрый способ.

...