模型映射器中的延迟初始化异常

时间:2019-06-22 13:08:10

标签: java hibernate modelmapper

在从实体转换为dto时,Modelmapper给出了LazyInitializationException

有什么办法可以禁用此功能吗?如果在事务块中调用modelmapper.map可以正常工作,但是它正在加载我根本不需要的所有惰性对象。 我要是懒惰就根本不要加载它。

  

转换器org.modelmapper.internal.converter.MergingCollectionConverter@6a51c12e无法将org.hibernate.collection.internal.PersistentSet转换为java.util.Set。

     

由以下原因引起:org.modelmapper.MappingException:ModelMapper映射错误:

1)无法从com.app.flashdiary.entity.Vendor.getApproved()获得价值

  

由以下原因引起:org.hibernate.LazyInitializationException:无法初始化代理[com.app.flashdiary.entity.Vendor#1]-没有会话     在org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:169)

3 个答案:

答案 0 :(得分:0)

我从这里找到了解决方案:

https://github.com/modelmapper/modelmapper/issues/97

modelMapper.getConfiguration().setPropertyCondition(new Condition<Object, Object>() {
      public boolean applies(MappingContext<Object, Object> context) {
        return !(context.getSource() instanceof PersistentCollection);
      }
    });

答案 1 :(得分:0)

JAVA_8

modelMapper.getConfiguration()
           .setPropertyCondition(context -> 
                 !(context.getSource() instanceof PersistentCollection)
            )

答案 2 :(得分:0)

我改进了@smile 响应,他的解决方案永远不会映射 <dependency> <groupId>com.sun.xml.ws</groupId> <artifactId>jaxws-rt</artifactId> <version>2.3.3</version> <scope>provided</scope> </dependency> 。相反,使用此解决方案,没有 PersistentCollection 的对象将被正确映射:

LazyInitializationException