В настоящее время невозможно достичь того, что вы ищете, без добавления дополнительного метода сопоставления с аннотациями.
Когда используется
@Mapping(target = "organization", ignore = true)
, независимо от того, что вы делаете с вложенные отображения для organization
, все свойство organization
игнорируется.
Однако вы можете достичь того, что вам нужно, если вы выполните следующее:
@Mapper
interface PersonMapper {
@Mapping(target = "organization", source = "model"
Person toEntity(PersonModel model);
@BeanMaping(ignoreByDefault = true)
@Mapping(target = "id", source = "organizationId")
Organization toOrganizationEntity(PersonModel model)
}
Что мы только что сделали сейчас:
- Мы добавили пользовательскую модель
toOrganizationEntity
из PersonModel
в Organization
- Мы сказали, что сопоставляем исходный параметр для модели (из toEntity) в организация
- Мы игнорируем все свойства для отображения цели в
toOrganizationEntity
- Мы явно отображаем
organizationId
в id
Organization
.
Если вы не хотите предоставлять метод publi c на своем интерфейсе PersonMapper
, вы можете использовать абстрактный класс.
@Mapper
public class PersonMapper {
@Mapping(target = "organization", source = "model"
public abstract Person toEntity(PersonModel model);
@BeanMaping(ignoreByDefault = true)
@Mapping(target = "id", source = "organizationId")
protected abstract Organization toOrganizationEntity(PersonModel model)
}