当前位置: 首页 > 知识库问答 >
问题:

ModelMapper-在实体中映射DTO的属性,该实体具有具有此属性的关系

龙焱
2023-03-14

早上好

我正在使用ModelMapper将DTO映射到实体,反之亦然,与此相关,我有一个问题。

1)当我从SonController获取SonDTO时,我需要将长的motherId映射到实体Son,但在那里我有实体mothermother来建立关系,它在内部有id。那么我如何将这个SonDTO motherId映射到实体mothermother中,反之亦然?

类以下:

class SonDTO {
    long id;
    String name;
    int age;
    long motherId;
}
class MotherDTO{
    long id;
    String name;
    int age;
    List<Long> sonsId;
    List<String> sonsName;
}
@Entity
class Mother{

   @Id
   @GeneratedValue(strategy=GenerationType.IDENTITY)
   private Long id;

   @Column(name = "name")
   private String name;

   @Column(name = "age")
   private int age;

   @OneToMany(mappedBy = "mother", cascade = CascadeType.ALL, fetch = FetchType.LAZY, orphanRemoval = true)
   List<Son> sons;

}
@Entity
class Son{

   @Id
   @GeneratedValue(strategy=GenerationType.IDENTITY)
   private Long id;

   @Column(name = "name")
   private String name;

   @Column(name = "age")
   private int age;

   @ManyToOne(fetch = FetchType.LAZY)
   @JoinColumn(name = "mother_id")
   private Mother mother;
}

共有1个答案

戎洛城
2023-03-14

您可以为实体使用PropertyMap并将其添加到ModelMapper

PropertyMap<Mother, MotherDTO> motherMap = new PropertyMap<Mother, MotherDTO>() {
     protected void configure() {
         map().setSonsId(source.getSons()...//here is your choice of coding
         // you can either use streams or simple for loops to transform the
         // entity into a List<Long> 
         );
         //other attributes here
     }
};

最终:

modelMapper.addMappings(motherMap);

您不必为sondto对象创建映射,因为modelMapper正在查看属性名称并使用默认匹配策略,而sondto的属性名称仅足以不使用其他策略并匹配正确的源(son)属性。

链接:

1)匹配过程(非常重要):这里

2)匹配策略(非常重要):这里

3)示例(重要):这里。(请注意这里的属性命名。)

 类似资料:
  • 我目前正在尝试使用ModelMapper的映射方法执行实体到DTO的映射。在最深的属性映射上,映射结果为null,但它应该是一个对象。 以下是我的映射源实体(省略brevety的Loombok getter和setter): 以下是我的目标DTO(省略brevety的Loombok Getter和Setter): 在我的Controller类方法上,我这样做映射: My clientService

  • 我在JPA中使用Micronaut数据,并且有两个实体。第一个是< code >配方: 第二个是,它指的是 : 现在我想在API中为DTO提供属性,但不提供整个实体,因为它包含MonyToOne和OneToMany关系,在这种情况下不需要。因此,我为此创建了投影 DTO: 并将< code>listAll()方法添加到< code > parse error repository 中: 但似乎Mi

  • 问题内容: 说,我有以下实体: 通过结合使用模式自动生成功能,我得到了一个附加表,其中包含和之间的映射。但是,我想实现通过添加一个一对多的关系的 编号 为( 例如,没有附加表 )。 这可能吗?如果是,我应该使用什么注释来创建这种映射? 问题答案: 通常,使用@JoinColumn批注是可能的。它也适用于可嵌入对象。 如果您对embeddable中指定的列的A_ID名称不满意,则可以覆盖实体A中的列

  • 我使用Spring Data Neo4J 5.0.10与Spring Boot 2.0.5。节点I具有以下2个实体,用户兴趣实体和用户兴趣实体的关系。 这很有效。我可以创建一个新用户并将该用户与userInterest关联。当我再次发送相同的详细信息时,节点和边不会重复。 当我在关系实体中启用权重属性时,即使权重属性值相同,关系似乎也是重复的。 我记得我读到过,只要属性相同,就不应该创建另一种关系

  • 问题内容: 我有以下实体: 我的属性ScriptItem是其他3个类的接口。是否可以将JPA配置为在运行时执行时设置正确的类ID? 其他资源: 我应该使用哪些注释来让JPA理解要保存3个类之一的ID? 提前致谢, 问题答案: 这确实是一个好主意,但不幸的是,JPA不支持将接口直接映射为实体属性。 您只能映射直接用注释的顶级类。这个顶级类可以实现一个接口。 这个功能已经被要求并讨论了很长时间。 根据

  • 我是为了一个电子商务系统而向Lucene提出的,需要索引产品及其属性。然而,我不确定如何处理这个问题,因为每个产品都有一个完全唯一的属性列表。 大多数在线示例显示lucene访问层具有产品结构,如名称/标题/描述,有时甚至带有只为每个产品添加的自定义域。