我最近在我的项目中添加了mapStruct。这个框架很酷,但我想不出一件事。
这就是我的情况:我有个人档案和个人类型的实体和字段。我想用ProfileDto更新它。我正在为此使用void fromDto(ProfileDto dto,@MappingTarget 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的新实例
人员=新人员();
我不知怎么用以下内容替换此字符串:
人员=实体。getPerson()
这是一个已知的问题,请参阅#1011。这已在1.2.0
中得到改进(在撰写11.07.2017时,最新版本是1.2.0. Beta3
)。您应该尝试最新版本,它应该可以按预期工作。
我有一种情况,在一个DTO中有另一个DTO,我必须映射到它对应的实体。 我正在使用mapstruct,我已经有antherEntityMapper已经存在。 如何更改EntityMapper接口,以便我可以将一个另一个EntityDTO映射到另一个Entity? 谢谢
我正在使用MapStruct制作
问题内容: 我正在使用 MapStruct 进行映射。相同的映射器用于从dto 创建 和 更新 实体。完成dto的id验证,以了解是否必须创建一个新实体(id == null)还是应该从数据库中检索它(id!= null)。 我实际上正在使用MapperDecorator作为解决方法。范例: 映射器 装饰器 但是,由于必须为每个映射器创建一个装饰器,因此该解决方案变得繁重。 有什么好的解决方案吗?
我使用的是spring data jpa,我有一个实体,代码如下: 我使用org . spring framework . data . JPA . repository . JPA repository进行相关的CRUD操作。 当我第一次保存实体(例如creationTimestamp=1)时,方法保存(实体)返回保存的实体(如javadoc所说),其中包含用于进一步操作的新id(如javado
我试图使用MapStruct创建一个“PersondTo”类到“PersonEntity”的映射器 无法将属性“java.util.List Cars”映射到“com.example.car.CarEntity Cars”。考虑声明/实现一个映射方法:“com.example.car.carEntity map(java.util.List value)”。 如果我从Person类中删除“加法器”
生成的父映射器如下所示: 但是当调用时,在子映射器上调用。 相反,我希望调用以下子映射器方法,以合并现有的子实体(假设我们在Dto中不存在的子实体上有其他字段,我们不想丢失这些字段)。 所需的结果是以下或其他等价的结果: