【问题标题】:mapstruct: update existing field of entity using data from DTOmapstruct:使用来自 DTO 的数据更新实体的现有字段
【发布时间】:2017-07-11 14:31:23
【问题描述】:

我最近在我的项目中添加了 mapStruct。这个框架很酷,但我想不通。

这是我的情况:我有 Profile 实体和字段,类型为 Person。我想使用ProfileDto 更新它。我为此使用void fromDto(ProfileDto dto, @MappingTarget Profile entity) 方法。问题是映射器总是 create new Person 而不是使用来自 profile entity 的人员

我的实体是:

public class Profile  {
    private Person person;
    .. setters, getters and  constructors 
}

public class Person extends AbstractEntity {
    private String name;
    private String surname;
    .. setters, getters and  constructors 
}

Dto

public class ProfileDto  extends AbstractDto {
    private String name;
    private String surname;
    .. setters, getters and  constructors 
}

我的映射器

public abstract class ProfileMapper {

    @Mappings({
            @Mapping(target = "name", source = "entity.person.name"),
            @Mapping(target = "surname", source = "entity.person.surname")

    })
    public abstract ProfileDto toDto(Profile entity);

    @InheritInverseConfiguration(name = "toDto")
    public abstract void fromDto(ProfileDto dto, @MappingTarget Profile entity);
}

生成的代码

      @Override
        public void fromDto(ProfileDto dto, Profile entity) {
            if ( dto == null ) {
                return;
            }
            Person person = new Person();
            entity.setPerson( person );
...

我不需要在这里创建新的 person 实例

person = new Person();

我用什么方法来替换这个字符串:

person = entity.getPerson()

【问题讨论】:

    标签: mapstruct


    【解决方案1】:

    这是一个已知问题,请参阅#1011。这已在 1.2.0 中得到改进(在撰写 11.07.2017 时,最新版本为 1.2.0.Beta3)。您应该尝试最新版本,它应该可以按预期工作。

    【讨论】:

    • 菲利普谢谢你。你知道什么时候发布 1.2.0.Final 版本吗?
    • 我们仍然不确定。 CR1 很快就会发布(也许这周)
    猜你喜欢
    • 2020-05-14
    • 2017-09-17
    • 2020-09-04
    • 1970-01-01
    • 2023-03-03
    • 2021-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多