首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用ModelMapper更新实体?

如何使用ModelMapper更新实体?
EN

Stack Overflow用户
提问于 2022-10-04 17:39:55
回答 1查看 92关注 0票数 1

所以我有这样的方法

代码语言:javascript
复制
public void updateEntity(String id) {
.....
.....
  Person person = personRepository.findById(id);
  StudentDTO studentDTO = studentService.getStudent(id); //This returns StudentDTO for the given id

  Person updatedPerson = personService.updatePerson(person, studentDTO);

  personRepository.save(updatedPerson);
}

public Person updatePerson(Person person, StudentDTO studentDTO) {
  ModelMapper modelMapper = new ModelMapper();
  modelMapper.getConfiguration().setSkipNullEnabled(true);
  modelMapper.typeMap(StudentDTO.class, Person.class).addMappings(mapper -> {
    mapper.map(StudentDTO::getId, PersonDTO::setId);
    mapper.map(src -> PersonUtil.getTaskName(src.getTaskInfo), Person::setTaskName);
  })

  return modelMapper.map(studentDTO, Person.class);
}

我面临着这段代码的两个问题。

  • 它没有更新Person实体。相反,它只是设置StudentDTO的值,并将空值赋值给Person实体的属性,这些属性在StudentDTO中是不可用的。
  • 对于任务名称,它是在TaskInfo属性中设置整个DTO。PersonUtil.getTaskName是接受对象并返回字符串taskName的函数,但是modelmapper出于某种原因为该字段分配了一个完整的dto。
EN

回答 1

Stack Overflow用户

发布于 2022-10-06 07:05:20

您似乎需要一个org.modelmapper.Converter来从taskInfo中分配taskName

假设StudentDTO.getTaskInfo()返回TaskInfo类型,而Person.taskNameString类型

代码语言:javascript
复制
Converter<TaskInfo, String> nameOfTaskInfo = ctx -> PersonUtil.getTaskName(ctx.getSource());

然后...and ..。

代码语言:javascript
复制
  modelMapper.typeMap(StudentDTO.class, Person.class).addMappings(mapper -> {
    mapper.map(StudentDTO::getId, Person::setId); // I think this could be skipped
    mapper.using(nameOfTaskInfo).map(StudentDTO::getTaskInfo), Person::setTaskName);
  })

但是TBH,我也是ModelMapper的新手,也许有更简单的解决方案。

解释

map函数的目的似乎是通过一些魔术(使用字节码操纵存根对象)来确定Getters和Setters。提供的表达式是在定义TypeMap时执行的,而不是在实际映射期间执行的。文档说:

将源getter值映射到目标setter

另一方面,在映射期间执行org.modelmapper.Converter

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73951672

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档