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