mapstruct: update existing field of entity using data from DTO

给你一囗甜甜゛ 提交于 2021-02-07 14:33:20

问题


I recently added mapStruct in my project. This framework is cool, but I can not figure out one thing.

This is my case: I have Profile entity and field with the Person type. I want to update it using ProfileDto. I am using void fromDto(ProfileDto dto, @MappingTarget Profile entity) method for this. The problem is that mapper always create new Person instead of using person from profile entity

My entity is:

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 
}

my mapper

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);
}

generated code

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

I don't need to create new instance of person here

person = new Person();

I what somehow to replace this string with:

person = entity.getPerson()


回答1:


This is a known issue, see #1011. This has been improved in 1.2.0(at the time of writing 11.07.2017 the latest version is 1.2.0.Beta3). You should try the latest version, it should work as expected.



来源:https://stackoverflow.com/questions/45037502/mapstruct-update-existing-field-of-entity-using-data-from-dto

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!