Как настроить модель-маппер с двунаправленными объектами? - PullRequest
0 голосов
/ 28 марта 2019

Я пытаюсь использовать модель-маппер с двунаправленными сущностями, что дает мне StackOverFlow.

Мои сущности:

public class EntityA {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @OneToMany(mappedBy="entityA", cascade = CascadeType.PERSIST, fetch = FetchType.EAGER)
    private Set<EntityB> bSet = new HashSet<EntityB>(0);

    public void setBSet(Set<EntityC> bSet ) {
    bSet.forEach(f -> c.setEntityA(this));
    this.bSet = bSet;
    }
    //Other setters and getters
}
public class EntityB {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "entityA_id"))
    private EntityA entityA;

    @OneToMany(mappedBy="entityB", cascade = CascadeType.PERSIST, fetch = FetchType.EAGER)
    private Set<EntityC> cSet = new HashSet<EntityC>(0);


    public void setCSet(Set<EntityC> cSet ) {
        cSet .forEach(f -> c.setEntityB(this));
        this.cSet = cSet ;
    }
   //Other setters and getters

}
public class EntityC {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "entityB_id"))
    private EntityB entityB;

   //setters and getters
}

Мои DTO

public class DtoA {
    private Long id;
    private Set<DtoB> bSet = new HashSet<DtoB>(0);
    //setters and getters
}
public class DtoB{
    private Long id;
    private Set<DtoC> cSet = new HashSet<DtoC>(0);
   //setters and getters

}
public class DtoC {
    private Long id;
   //setters and getters
}

Итак, когда ясделать следующий код у меня был переполнение стека для рекурсивности сущностей.

modelMapper.getConfiguration().setMatchingStrategy(MatchingStrategies.STRICT);
modelMapper.getConfiguration().map(dto, EntityA.class);     

Я пытаюсь добавить эту конфигурацию, но проблема сохраняется:

modelMapper.getConfiguration().setFieldAccessLevel(AccessLevel.PRIVATE);
modelMapper.getConfiguration().setFieldMatchingEnabled(true);

Как я могу решить эту проблему?

...