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

Mapstruct映射器的方法重载和继承配置

国仰岳
2023-03-14

我们正在使用带有Spring数据的MapStruct在JPA实体和DTO类之间进行转换。所有映射器都使用方法beanToDTO()和dtoToBean()遵循相同的模式。经过一次学习治疗后,我们就有了这一切。现在我们尝试使用Spring注入来替换JPA实体、DTO和映射器类上的实现。我们有JPA实体和DTO替换工作。所以现在我们尝试让Spring注入替代映射器实现。

对于我们的问题,我们可以子类映射器html" target="_blank">接口,而不是它将有2个beanToDTO()方法和2个dtoToBean方法(),1个用于基JPA实体和DTO,1个用于子类化的JPA实体和DTO。这对于简单的示例很好用。

对于需要一些定制的映射器,我们使用@Mapping注释和@InheritInverseconfiguration作为基映射器。对于子类映射器,我们尝试了同样的方法,但问题是子类映射器中的InheritInverseConfiguration给出错误“几个匹配的反向方法存在:beanToDTO(),beanToDTO().显式指定一个名称。”

这两个方法具有相同的名称,因此我们没有办法识别我们想要引用的实现。我意识到这个问题是由于我们的实现方法造成的,但是它将我们的代码简化为:-getBean()-getMapper().BeantoDTo(),并且我们将能够通过Spring注入来替换JPA实体、映射器和DTO。

有没有其他的MapStruct技巧可以帮助我们解决这个问题?

谢谢

共有1个答案

赏高格
2023-03-14

您看过@mapperconfig...检查我们的单元测试。我建议将您的基/原型方法放在@mapperconfig注释的共享配置接口中,您可以在@mapper中引用该接口

有关更多信息,请参阅此单元测试。或者查看用户指南。

 类似资料:
  • 我有以下情况,我简化了我的实际案例,并创建了最小示例来展示我的案例: 两个空的(在本例中不相关)classess和和映射器继承结构使用一个方法声明将映射到,两个空接口和都扩展,一个实际映射器接口和类实现MapStruct生成的。此设置的问题是mapstruct生成,其内容如下: 所以它不会组合,因为方法声明了两次,一次是通过继承路径,第二次是通过。在不改变我的继承结构的情况下,是否有可能避免这种情

  • 我有一个BaseEntity,当我像这样制作mapper时,它有一个名为Customer的子级: Mapstruct不会自动映射BaseEntity字段。你能告诉我怎么做吗?

  • 问题内容: 这是我遇到的一个测试练习问题,希望您能帮助我理解概念 让Hawk成为Bird的子类。假设某个类有两个重载的方法void foo(Hawk h)和void foo(Bird b)。在声明Bird x = new Hawk()之后,将在调用foo(x)中执行哪个版本; 这是我到目前为止的代码,有人可以向我解释为什么foo(bird b)被执行吗? 问题答案: Java执行重载解析以选择方法

  • 1. 前言 本节课程和大家一起学习继承映射。通过本节课程的学习,你将了解到: 什么是继承映射; 实现继承映射的 3 种方案。 2. 继承映射 学习继承映射之前,需要搞清楚什么是继承映射? 继承是 OOP 中的概念,其目的除了复用代码之外,还用来描述对象在现实世界中的关系。 为了更好地讲解继承映射,咱们再在数据库中创建一张老师表。数据库中多了一张表,按照使用 Hibernate 的套路,理所当然应该

  • 例如,我有以下接口映射器: 在代码中,您可以看到映射和一些默认方法,其中包含其他映射。如何在Mapstruct映射中使用这些方法,以便Mapstruct使用这些方法在字段中填充值?

  • 本文向大家介绍解析Java继承中方法的覆盖和重载,包括了解析Java继承中方法的覆盖和重载的使用技巧和注意事项,需要的朋友参考一下 方法的覆盖 在类继承中,子类可以修改从父类继承来的方法,也就是说子类能创建一个与父类方法有不同功能的方法,但具有相同的名称、返回值类型、参数列表。   如果在新类中定义一个方法,其名称、返回值类型和参数列表正好与父类中的相同,那么,新方法被称做覆盖旧方法。   参数列