Как MapStruct даже (в общем c способе) распознает, присутствует ли объект в целевом наборе?
Но ничто не мешает вам написать свою собственную реализацию для этого .. Что-то вроде это:
@Mapper()
public abstract class ChildMapper {
abstract Child dtoToChild(ChildDto dto);
abstract Child updateChildFromDto( ChildDto dto, @MappingTarget Child geo);
Set<Child> dtosToChilds(final Set<ChildDto> childs);
// NOTE the void, I don't like to return a mapping target. MapStruct calls
// update methods from update methods an regular methods from regular methods
// using both in one signature, things tend to get blurry
void updateDtosToChilds(Set<ChildDto> childs, @MappingTarget Set<Child> target){
for ( ChildDto child : childs {
Child targetChild = null;
// get matching child from target
if ( targetChild != null ) {
updateChildFromDto( child, targetChild );
}
else {
target.add( dtoToChild( child ) );
}
}
}
}
и, как указано выше, не делайте:
@InheritConfiguration(name = "dtoToParent")
public abstract Parent updateParentFromDto(
final ParentDto dto,
final @MappingTarget Parent parent);
, а
@InheritConfiguration(name = "dtoToParent")
public abstract void updateParentFromDto(
final ParentDto dto,
final @MappingTarget Parent parent);