执行map方法时Orika延迟加载

时间:2016-03-17 13:20:47

标签: java spring hibernate jpa orika

我正在使用Orika将我的Hibernate实体映射到Web服务调用中的DTO对象。这些实体在其中具有@OneToMany和@ManyToOne关系,用于父子关系。另外,我使用Spring JPA来创建这些实体。

将Hibernate实体映射到POJO DTO类时,map()方法会导致加载所有延迟加载的属性。

@Entity
@Table(name="folders")
public class FolderEntity {
    @Id
    @GeneratedValue
    private int id;

    @ManyToOne(fetch=FetchType.LAZY)
    @JoinColumn(name="consumerId")
    private ConsumerEntity consumer;
public class Folder
    private int id;
    private User consumer;
Folder folder = mapper.map(some_folder_entity, Folder.class);

在这种情况下,使用者属性映射会导致Hibernate加载子进程,这不是我想要的。

我虽然HibernateUnenhanceStrategy是通过删除Hibernate代理来解决这个问题,但它没有,或者我做错了。

@Component
public class MapperFacadeFactory implements FactoryBean<MapperFacade> {

    public MapperFacade getObject() throws Exception {
        DefaultMapperFactory.Builder factoryBuilder = new DefaultMapperFactory.Builder();
        factoryBuilder.unenhanceStrategy(new HibernateUnenhanceStrategy());
        DefaultMapperFactory factory = factoryBuilder.build();      
        MapperFacade facade = factory.getMapperFacade();
        return facade;
    }

我意识到我可以从映射配置中排除字段,但我希望这些子项可能在某些Web服务调用中,但只希望在其他Web服务调用中使用高级父属性。

我相信我可以自己创建一个CustomMapper来解决这个问题,但在我走这条路之前,我想确保我不会错过Orika内置的东西。

感谢。

0 个答案:

没有答案