让ModelMapper忽略JPA Lazy并且尚未初始化的映射字段

时间:2018-12-19 21:50:15

标签: java hibernate jpa modelmapper

如果您使用过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/

上对自定义映射进行一些研究。

但是我似乎找不到找到某种逻辑的方法。

我找到了解决方法here,但这是给推土机的

编辑:

我正在使用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忽略该字段,如果它是惰性的并且尚未初始化。

0 个答案:

没有答案