Пусть ModelMapper игнорирует поля отображения, которые являются JPA Lazy и не были инициализированы - PullRequest
0 голосов
/ 20 декабря 2018

Если вы использовали JPA, вы, вероятно, столкнулись с классическим

org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: class, could not initialize proxy - no Session

. Я использую ModelMapper, чтобы отобразить мои спящие объекты в DTO, и, конечно, я сталкиваюсь с этой проблемой.,Первоначально, до этого момента, все было установлено на EAGER, но я быстро понял, что это НЕ решение, поскольку теперь все ОЧЕНЬ медленно загружается.Итак, теперь я вернулся к настройке LAZY.

Итак, мой вопрос: есть ли способ настроить ModelMapper, чтобы он мог проверять, является ли поле ленивым перед отображением / и если оно ленивое, не отображать его?

Я проводил здесь некоторые исследования пользовательских отображений http://modelmapper.org/user-manual/property-mapping/

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

Я нашел решение здесь , но это для Dozer

EDIT:

Я использую Spring Boot JPA.Вот мой код:

@Data
@Entity
@Table(name = "vm_request")
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id")
public class VirtualMachineRequest {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    // removed other properties

    @OneToMany(mappedBy = "request", cascade = CascadeType.ALL, orphanRemoval = true)
    @ToString.Exclude
    @EqualsAndHashCode.Exclude
    private Set<VirtualMachine> virtualMachines;

}

Я сопоставляю этот объект с DTO:

@Data
public class VirtualMachineRequestDTO {

    private Long id;

    // removed other properties

    private Set<VirtualMachineDTO> virtualMachines;

}

, используя ModelMapper как таковой:

public VirtualMachineRequestDTO convertToDTO(VirtualMachineRequest request) {
    VirtualMachineRequestDTO requestDTO = mapper.map(request, VirtualMachineRequestDTO.class);

    return requestDTO;
}

Моя проблема в том, что, поскольку набор virtualMachines по умолчанию Lazy (и это предназначено для определенных ситуаций), ModelMapper встречает исключение LazyInitializationException

Я пытаюсь найти способиметь ModelMapper игнорировать поле, если оно ленивое и не было инициализировано.

...