5

我正在使用 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 内置的东西。

谢谢。

4

0 回答 0