Конвертировать длинный идентификатор в список Set с помощью Mapstruct? - PullRequest
0 голосов
/ 04 октября 2019

В интерфейсе Mapstruct, как я могу преобразовать идентификатор в Set ?

Я пытался сделать следующее, но безуспешно, потому что произошла ошибка:

@Mapper(componentModel = "spring", uses = {UserSystemService.class})
public interface CompanyPostMapper extends EntityMapper<CompanyPostDTO, Company> {

    @Mapping(source = "userSystemId", target = "userSystems", expression = "java(userSystemService.findByIdAndAddToSet(id))")
    Company toEntity(CompanyPostDTO dto);


    default Company fromId(Long id) {
        if (id == null) {
            return null;
        }
        Company company = new Company();
        company.setId(id);
        return company;
    }
}

Я незнаю, правильно ли я понял использование параметра «using», но в основном я хотел бы получить идентификатор, запросить регистр и вернуть Set с регистром.

Я собирался попробовать «qualByName» исоздать метод в интерфейсе Mapper, но я не знаю, как я могу внедрить репозиторий, и я не знаю, будет ли это хорошей практикой.

Какой наилучший способ решить?

1 Ответ

0 голосов
/ 05 октября 2019

MapStruct является структурой отображения. Вы делаете поиск в отображении. Это возможно, конечно (посмотрите на пример отображения JPA, где используется @Context). Но вы не можете наследовать EntityMapper<CompanyPostDTO, Company> одновременно.

Обычно вам нужно вывести поиск за пределы вашей логики сопоставления и использовать метод обновления для обновления объекта.

Тогда ваше сопоставление будет выглядеть так:

@Mapper(componentModel = "spring" )
public interface CompanyPostMapper {

   void updateEntity(CompanyPostDTO dto, @MappingTarget Company entity);
}

// and your call would look like:

public class CallingService{
   Company company = userSystemService.findByIdAndAddToSet(id));
   if (company == null) {
     company = new Company();
   }
   companyPostMapper.updateEntity(dto, company);
}
...