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