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