В 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?
заранее спасибо