package mapstruct; import org.mapstruct.Mapper; import org.mapstruct.Mapping; import org.mapstruct.ReportingPolicy; @Mapper(unmappedTargetPolicy = ReportingPolicy.IGNORE) public abstract class MapStructWithHirarchyMapper { // @Mapping(ignore = true, target = "child.id") // solves the issue, but should not be required on ReportingPolicy.IGNORE protected abstract Root mapRoot(RootDto rootDto); public static abstract class MyDatabaseEntity { private Long id; public Long getId() { return id; } public void setId(Long id) { this.id = id; } } public static class Root extends MyDatabaseEntity { private Child child; public Child getChild() { return child; } public void setChild(Child child) { this.child = child; } } public static class Child extends MyDatabaseEntity { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } } public static class RootDto { private ChildDto child; public ChildDto getChild() { return child; } public void setChild(ChildDto child) { this.child = child; } } public static class ChildDto { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } } }