ModelMapper - сопоставьте свойство DTO внутри сущности, у которой есть отношение, имеющее это свойство - PullRequest
0 голосов
/ 24 марта 2020

Доброе утро

Я использую ModelMapper для сопоставления DTO с сущностями и наоборот, и в связи с этим у меня есть один вопрос.

1) Когда я получаю SonDTO от SonController, мне нужно отобразить длинный motherId на Entity Son, но там у меня есть мать Entity Mother, которая устанавливает отношения, и у нее есть внутренний идентификатор. Итак, как мне сопоставить этот SonDTO motherId с матерью Entity Mother и наоборот?

Ниже классов:

class SonDTO {
    long id;
    String name;
    int age;
    long motherId;
}
class MotherDTO{
    long id;
    String name;
    int age;
    List<Long> sonsId;
    List<String> sonsName;
}
@Entity
class Mother{

   @Id
   @GeneratedValue(strategy=GenerationType.IDENTITY)
   private Long id;

   @Column(name = "name")
   private String name;

   @Column(name = "age")
   private int age;

   @OneToMany(mappedBy = "mother", cascade = CascadeType.ALL, fetch = FetchType.LAZY, orphanRemoval = true)
   List<Son> sons;

}
@Entity
class Son{

   @Id
   @GeneratedValue(strategy=GenerationType.IDENTITY)
   private Long id;

   @Column(name = "name")
   private String name;

   @Column(name = "age")
   private int age;

   @ManyToOne(fetch = FetchType.LAZY)
   @JoinColumn(name = "mother_id")
   private Mother mother;
}

1 Ответ

0 голосов
/ 24 марта 2020

Вы можете использовать PropertyMap для своей сущности и добавить его к ModelMapper.

PropertyMap<Mother, MotherDTO> motherMap = new PropertyMap<Mother, MotherDTO>() {
     protected void configure() {
         map().setSonsId(source.getSons()...//here is your choice of coding
         // you can either use streams or simple for loops to transform the
         // entity into a List<Long> 
         );
         //other attributes here
     }
};

и в конечном итоге:

modelMapper.addMappings(motherMap);

Вам не нужно создавать отображение для объекта SonDTO, потому что modelMapper просматривает имя ваших атрибутов и использует стратегию сопоставления по умолчанию, а имя атрибута SonDTO достаточно, чтобы не использовать другие стратегии и сопоставить правильный источник (Son) Атрибуты.

Ссылки:

1) Процесс сопоставления ( очень важно ): здесь

2) Стратегии сопоставления ( очень важно ): здесь

3) Пример ( важно ): здесь . (Пожалуйста, обратите внимание на имя атрибута.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...