ModelMapper mapper.skip () не работает для объектов pojo с круговой зависимостью - PullRequest
0 голосов
/ 24 мая 2018

У меня есть два объекта pojo: Husband, Wife, которые ссылаются друг на друга.

Husband.java

public class Husband {
   private String name;
   private int age;
   private String man;
   private Wife wife;

   // getter, setter, builder, constructor are removed for berevity
}

Wife.java

public class Wife {
   private String name;
   private int age;
   private String woman;
   private Husband husband;

   // getter, setter, builder, constructor are removed for berevity
}

Я создал простые правила TypeMap для обоих объектов, где указанный объект пропускается.

Мой тестовый класс:

public class ModelTest {

@Test
public void test() {
    ModelMapper modelMapper = new ModelMapper();
    TypeMap<Wife, Wife> typeWife = modelMapper.createTypeMap(Wife.class, Wife.class);
    typeWife.addMappings(mapper -> {
        mapper.skip(Wife::setHusband);
    });

    TypeMap<Husband, Husband> typeHusband = modelMapper.createTypeMap(Husband.class, Husband.class);
    typeHusband.addMappings(mapper -> {
        mapper.skip(Husband::setWife);
    });

    Wife wife = Wife.builder().age(25).name("Sarah").woman("good woman").build();
    Husband husband = Husband.builder().age(28).name("Imtiaz").man("good man").build();
    wife.setHusband(husband);
    husband.setWife(wife);

    Husband updatedHusband = Husband.builder().age(28).name("Imtiaz Shakil").man("slightly good man").build();
    modelMapper.map(updatedHusband, husband);
    System.out.println(husband.toString());
    System.out.println(husband.getWife().toString());
    }

}

При отображении updatedHusband в husband, setWife() метод не пропущен.Но если мы удалим отображение typeWife из modelMapper, код будет работать нормально.

Я использую ModelMapper 1.1.3

Спасибо.

Редактировать: Я думаю, чтоПроблема в том, что сопоставления генерирует модель.Когда я печатаю сопоставления каждой карты типов, вот что я получаю:

[PropertyMapping[Wife.age -> Wife.age], PropertyMapping[ -> Wife.husband], PropertyMapping[Wife.name -> Wife.name], PropertyMapping[Wife.woman -> Wife.woman]]
[PropertyMapping[Husband.age -> Husband.age], PropertyMapping[Husband.man -> Husband.man], PropertyMapping[Husband.name -> Husband.name], PropertyMapping[ -> Husband.wife], PropertyMapping[Husband.wife.age -> Husband.wife.age], PropertyMapping[Husband.wife -> Husband.wife.husband], PropertyMapping[Husband.wife.name -> Husband.wife.name], PropertyMapping[Husband.wife.woman -> Husband.wife.woman]]

TypeMap typeHusband выбирает отображение из typeWife во время процесса отображения.

1 Ответ

0 голосов
/ 25 июля 2018

Проблема исправлена ​​ в v2.1.0.Спасибо разработчикам за отличную работу!

...