我最近在我的项目中添加了mapStruct。这个框架很酷,但我无法弄清楚一件事。
这是我的情况:我有Profile
实体和Person
类型的字段。我想使用ProfileDto
更新它。我正在使用void fromDto(ProfileDto dto, @MappingTarget Profile entity)
方法。问题是映射器总是创建新人而不是使用来自profile
实体的人
我的实体是:
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 = new Person();
我用什么方式替换这个字符串:
person = entity.getPerson()
答案 0 :(得分:1)
这是一个已知问题,请参阅#1011。这在1.2.0
得到了改进(在撰写本文时间为2017年7月17日,最新版本为1.2.0.Beta3
)。您应该尝试使用最新版本,它应该按预期工作。