Я пытаюсь реализовать библиотеку картографирования 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
}
Генератор данных
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);
}
Приложение
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. В настоящее время я думаю заменить пружину BeanUtils на MapStruct .
какие-либо предложения?