问题
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