[递归映射时出现MapStruct问题

问题描述 投票:0回答:1

我已经尝试实现MapStruct映射库。我已经制作了样本,并且对于简单的映射它可以正常工作,但是我陷入了1期。我有2个具有两种方式关系的jpa实体类。一个在另一个中,另一个在一个中。它会产生循环映射问题,因此MapStruct会引发StackOverflow错误。我创建了最少的代码来重现github的大小写。示例代码:

public class A {
    private Long id;
    private String name;
    private B bData;
    //getter-setter
}

public class B {
    private Long id;
    private String name;
    private Set<A> aData;
    //getter-setter
}

DataGenerator

public class DataGenerator {
    public static A generateData(){
        A a = new A();
        a.setId(1L);
        a.setName("foo");
        B b = new B();
        b.setId(2L);
        b.setName("bar");

        A a2 = new A();
        a2.setId(3L);
        a2.setName("john");
        a2.setbData(b);
        A a3 = new A();
        a3.setId(4L);
        a3.setName("doe");
        a3.setbData(b);

        Set<A> aData = new HashSet<A>();
        aData.add(a2);
        aData.add(a3);
        b.setaData(aData);

        a.setbData(b);
        return a;
    }
}

Mapper

@Mapper
public interface CustomMapper {
    CustomMapper INSTANCE = Mappers.getMapper(CustomMapper.class);
    ADto atoADto(A a);
}

App

public class AppMain {
    public static void main(String[] args) {
        A a = DataGenerator.generateData();
        ADto aDto = CustomMapper.INSTANCE.atoADto(a);
        System.out.println(aDto.getId());
    }
}

Dto / Destination类与原始源类相同。主要是循环/递归映射问题,这会导致堆栈溢出错误。

spring BeanUtils.copyProperties]工作相同,但我想实现MapStruct。目前,我正在考虑用MapStruct替换spring BeanUtils

有什么建议吗?

我已经尝试实现MapStruct映射库。我已经制作了样本,并且对于简单的映射它可以正常工作,但是我陷入了1期。我有2个具有两种方式关系的jpa实体类。 ...

java mapping mapstruct
1个回答
1
投票

[在MapStruct存储库中有一个示例here,该示例如何处理循环和递归。基本上,您需要跟踪状态。该示例利用上下文对象来执行此操作。

© www.soinside.com 2019 - 2024. All rights reserved.