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

Mapstruct映射器菱形继承,方法已定义

纪正德
2023-03-14

我有以下情况,我简化了我的实际案例,并创建了最小示例来展示我的案例:

两个空的(在本例中不相关)classessphonephone和映射器继承结构testsupermapper使用一个方法声明将phone映射到phone,两个空接口testparent1mappertestparent2mapper都扩展testsupermapper,一个实际映射器接口testmapperTestMapperImpl类实现MapStruct生成的TestMapper。此设置的问题是mapstruct生成TestMapperImpl,其内容如下:

import javax.annotation.processing.Generated;

@Generated(...)
public class TestMapperImpl implements TestMapper {

    @Override
    public Phone map(PhoneDto phoneDto) {
        if ( phoneDto == null ) {
            return null;
        }

        Phone phone = new Phone();

        return phone;
    }

    @Override
    public Phone map(PhoneDto phoneDto) {
        if ( phoneDto == null ) {
            return null;
        }

        Phone phone = new Phone();

        return phone;
    }
}

所以它不会组合,因为方法Phone map(PhoneDto)声明了两次,一次是通过TestParent1Mapper继承路径,第二次是通过TestParent2Mapper。在不改变我的继承结构的情况下,是否有可能避免这种情况?Mapstruct版本1.4.1.Final,jdk 11。实际的javac异常是java:testMapperImpl类中已经定义了方法映射(PhoneDto)。

共有1个答案

熊锐进
2023-03-14

原来这是mapstruct的问题,我已经创建并发布了mapstruct的维护者已经修复了它:https://github.com/mapstruct/mapstruct/issues/2437

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

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

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

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

  • 本文向大家介绍关于C++中菱形继承和虚继承的问题总结,包括了关于C++中菱形继承和虚继承的问题总结的使用技巧和注意事项,需要的朋友参考一下 前言 菱形继承是多重继承中跑不掉的,Java拿掉了多重继承,辅之以接口。C++中虽然没有明确说明接口这种东西,但是只有纯虚函数的类可以看作Java中的接口。在多重继承中建议使用“接口”,来避免多重继承中可能出现的各种问题。本文将给大家详细介绍关于C++菱形继承

  • 我有麻烦映射一个嵌套dto字段正确与MapStruct。我有几个DTO: 具有相应的映射器 到目前为止,一切工作都很好,生成的代码自动连接其他需要的映射器来正确地构建DTO。例如生成的仪器映射器实现 现在,当我试图创建一个包含嵌套工具dto的映射器时遇到了麻烦。映射器应使用instrumentMapper正确创建所需的dto。DTO: 映射器: 生成的代码: 现在media mapper得到了很好