Java 如果MapStruct中的源为空,则将父目标设置为空

Java 如果MapStruct中的源为空,则将父目标设置为空,java,mapstruct,Java,Mapstruct,我有以下映射 @Mappings({ @Mapping(source = "id", target = "id"), @Mapping(source = "childId", target = "child.id") }) Entity objectDtoToEntity(ObjectDTO objectDTO); 我如何配置映射器或映射,以便当我将childId设置为null时,目标Entity.child将设置为null而不是Entity.child.id

我有以下映射

@Mappings({
        @Mapping(source = "id", target = "id"),
        @Mapping(source = "childId", target = "child.id")
})
Entity objectDtoToEntity(ObjectDTO objectDTO);

我如何配置映射器或映射,以便当我将childId设置为null时,目标Entity.child将设置为null而不是Entity.child.id

对我来说,这不是一个非常优雅的解决方案,而是一个有效的解决方案

首先将接口更改为抽象类,然后添加
@AfterMapping

@Mappings({
        @Mapping(source = "id", target = "id"),
        @Mapping(source = "childId", target = "child.id")
})
public abstract Entity objectDtoToEntity(ObjectDTO objectDTO);


@AfterMapping
public Entity doAfterMapping(@MappingTarget Entity entity) {
    if (entity != null && entity.getChild().getId() == null) {
        entity.setChild(null);
    }
    return entity;
}

对于我来说,这不是一个非常优雅的解决方案,而是一个有效的解决方案

首先将接口更改为抽象类,然后添加
@AfterMapping

@Mappings({
        @Mapping(source = "id", target = "id"),
        @Mapping(source = "childId", target = "child.id")
})
public abstract Entity objectDtoToEntity(ObjectDTO objectDTO);


@AfterMapping
public Entity doAfterMapping(@MappingTarget Entity entity) {
    if (entity != null && entity.getChild().getId() == null) {
        entity.setChild(null);
    }
    return entity;
}

目前,这是实现这一目标的唯一途径。这个问题还有一个悬而未决的问题。看看这里有没有更新,以更优雅的方式实现这个案例?现在这个问题已经问了两年多了。目前这是唯一的解决办法。这个问题还有一个悬而未决的问题。看看这里有没有更新,以更优雅的方式实现这个案例?现在,这个问题提出已经两年多了。