В Mapper Impl вызывается неверный метод

У меня есть следующие 2 класса отображения:

@Mapper(componentModel = "spring")
public interface GenderMapper extends BaseMapper<GenderDto, Gender> {
  GenderDto entityToDto(Gender entity);
  Gender dtoToEntity(GenderDto dto);
  void update(GenderDto dto, @MappingTarget Gender entity);
}

а также

@Mapper(uses=GenderMapper.class, componentModel = "spring")
public interface TitleMapper extends BaseMapper<TitleDto, Title> {
  TitleDto entityToDto(Title entity);
  Title dtoToEntity(TitleDto dto);
  void update(TitleDto dto, @MappingTarget Title entity);
}

Когда я пытаюсь обновить заголовок объекта следующими значениями:

{
 "titleId": 3,
 "gender": {
            "genderId": 10,
            "genderCode": "F",
            "genderDesc": "Female"
 },
 "titleCode": "T"
}

в

{
 "titleId": 3,
 "gender": {
            "genderId": 3,
            "genderCode": "M",
            "genderDesc": "Male"
 },
 "titleCode": "T"
}

Я получаю следующую ошибку:

org.hibernate.HibernateException: идентификатор экземпляра com.central.entities.Gender был изменен с 10 на 3

Если я смотрю на сгенерированный класс Impl, средство отображения заголовков пытается использовать метод обновления из класса Gender Mapper, а не метод dtoToEntity().

Если я изменю отображение заголовка, чтобы оно не использовало GenderMapper, и добавляю методы преобразования к отображению заголовка, то оно отлично работает:

@Mapper( componentModel = "spring")
public interface TitleMapper extends BaseMapper<TitleDto, Title> {
  TitleDto entityToDto(Title entity);
  Title dtoToEntity(TitleDto dto);
  void update(TitleDto dto, @MappingTarget Title entity);
  Gender dtoTotEntity(GenderDto dto);
  GenderDto entityToDto(Gender entity);
}

Есть ли какой-нибудь способ сказать Mapstruct не использовать метод update в классе Gender, а фактически использовать метод convert?

заранее спасибо

0 ответов

Другие вопросы по тегам