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

映射结构映射实体一对多到 DTO 和反向

南宫兴德
2023-03-14

我正在尝试使用映射结构,我需要将实体与子实体列表映射,我有关系 oneToManymanyToOne,我需要在这两种情况下进行映射:

@Data
@Entity
public class EmailEntity {

private int id;  

... // some fields

@ManyToOne
private DeliveredEmailInfoEntity deliveredEmailInfo;

}

@Data
@Entity
public class DeliveredEmailInfoEntity {

private int id;

... // some fields  

@OneToMany
private List<EmailEntity> emails;

}

映射到:

@Data
public class EmailDTO {

private int id;  

... // some fields

private DeliveredEmailInfoDTO deliveredEmailInfo;

}

@Data
public class DeliveredEmailInfoDTO {

private int id;

... // some fields  

private List<EmailDTO> emails;

}

怎么做最好?

共有2个答案

罗法
2023-03-14

(另见其他答案)

这应该是直截了当的,在您的案例中没有任何挑战:

@Mapper
public interface EmailInfoMapper {

    EmailDTO entityToDTO(EmailEntity duration);
    EmailEntity dtoToEntity(EmailDTO price);

    DeliveredEmailInfoDTO entityToDTO(DeliveredEmailInfoEntity duration);
    DeliveredEmailInfoEntity dtoToEntity(DeliveredEmailInfoDTO price);
}

你应该在你的问题中包括你的映射器,以及你有什么问题。

陆飞捷
2023-03-14

为了避免嵌套字段的无限交叉设置,您应该限制此依赖关系,例如在第二个嵌套级别,即您的根 EmailDTO 将有一个嵌套的 DeliveredEmailInfoDTO 对象(多对一关系),而您的根 DeliveredEmailInfoDTO 将具有嵌套 EmailDTO 对象列表(一对多关系),而在下一个嵌套级别上没有任何内容:

@Mapper(uses = DeliveredEmailInfoMapper.class)
public interface EmailMapper {

    @Mapping(target = "deliveredEmailInfo.emails", ignore = true)
    EmailDTO toDTO(EmailEntity entity);

    // other methods omitted 

    @Named("emailDTOList")
    default List<EmailDTO> toEmailDTOList(List<EmailEntity> source) {
        return source
                .stream()
                .map(this::toDTO)
                .peek(dto -> dto.setDeliveredEmailInfo(null))
                .collect(Collectors.toList());
    }
}

@Mapper(uses = EmailMapper.class)
public interface DeliveredEmailInfoMapper {

    @Mapping(target = "emails", source = "emails", qualifiedByName = "emailDTOList")
    DeliveredEmailInfoDTO toDTO(DeliveredEmailInfoEntity entity);

    // other methods omitted 

}
 类似资料:
  • 问题内容: 我是Go语言的新手,具有C#背景并且对如何构造Go应用程序感到困惑。 假设我正在构建一个REST API,它将位于数据库之上。还要说,即使完成后,鉴于业务的变迁等,此应用程序可能仍需要频繁更改。 在带有诸如Entity Framework和DTO之类的工具的C#中,我通过从控制器给出的结果中抽象出数据库来缓解此问题。如果更改数据库中一堆字段的名称,则可能必须更改数据库访问逻辑,但是希望

  • 我正在尝试使用AutoMapper在LLBLGen实体和DTO之间创建映射。 我的DTO如下所示: ParentEntity包含一个与DTO列表同名的ChildCollection和一个Id(需要忽略其他LLBL字段)。因此,当ParentEntity映射到父d to时,它也应该将ChildCollection映射到一个子列表。 这就是我到目前为止得到的: 这会导致Id被映射,但List的计数为0

  • 我正在为我们班做一个项目。需要将DTO映射到实体,反之亦然。我的DTO没有Id字段,转换正在控制器层进行。另外两个类正在扩展我的实体,因此@Superbuilder。 我的转换实体- 但是DTO- 如果你们谁能帮我找到解决办法,我将不胜感激。提前感谢您的时间和回复。 =======我的DTO===== =====我的实体===== } ====ModelMapper的Bean===== =====

  • 当我映射同一个实体时,就像这里回答的那样: Hibernate与同一实体的多对多关联 在“tbl_friends”表中,我有相同含义的行。例如,我有id=1的用户和id=2的用户。在“tbl_friends”表中,当他们作为朋友链接时,我有两行 使用Hibernate或JPA引用是否可以在一行(1-2或2-1)中建立这种关系?

  • 有两张数据表,其中A表的某个字段的值指向B表的主键。因为B表的任何一条记录理论上可以对应A表的多条记录,所以称这种 映射为B表对A表数据的一对多映射。 上述结构,如果用 POJO 来表示的话,可以参看下图: 如上图,一个 Master 自然就能对应多个 Pet ,所以, Master.pets (一个 List<Pet>) 就可以指向多个 Pet 对象, 那么我们说 Master.pets 就是

  • 我开始使用JOOQ和dvd租赁商店数据库aka sakila。基本上,我想找一个演员和他的角色(我创建的表)。到目前为止,我想到了这个: 我希望能够将演员及其角色提取到一个对象中:DTO。我找到了这篇文章https://arnaudroger.github.io/blog/2017/03/02/jooq-one-to-many-without-dto.html但我发现使用sfm的解决方案过于冗长,

  • 我已经用MapStruct 1.1工作了几天,但还没有达到我所需要的。 我想做的是:我想将JPA实体映射到DTO,以便在Primefaces项目中实现更好的属性视图绑定。 所以我有我的实体如下: 病人JAVA 人JAVA 我想把这些实体画成这样: 耐心等待。JAVA 潘松多。JAVA 我编写了Mapper类和一个实用程序,就像GitHub上的官方示例中描述的那样(https://github.co

  • 问题内容: 我正在使用Spring MVC框架编写简单的博客Web应用程序。我愿意为我的应用添加图层。 我决定使用ModelMapper框架从对象转换为视图中使用的对象。 我只有一个问题。在我的主页上,我正在显示博客中的帖子列表。在我看来,这只是(实体)对象的列表。我想更改它以将对象列表传递给我的视图。有没有什么办法来映射的对象的单方法调用的对象?我当时在考虑编写将对此进行转换的转换器,但是我不确