我的模型看起来像这样:
Customer (Name, Age, ..)
Project
Rent
Fault
(and maybe deeper)
因此每个客户都有一个项目列表。项目有一个租金清单。租金有一系列的故障。链接是双向的。
现在我有一个Spring MVC应用程序,它提供了JSP页面和一个休息接口。
应该有一个包含两种方法的服务:
Customer readCustomerShallow(long customerId)
这个是针对网站的,应该返回一个名字,年龄但没有项目的客户。
Customer readCustomerDeep(long customerId)
这个用于休息服务,应该返回包括所有项目的客户,项目应包含所有租金,租金应包含所有错误。
我想坚持使用延迟加载。所以readCustomerShallow()已经很好了。 对于readCustomerDeep(),我使用dozer创建了一个客户对象的深层副本并返回该文件。
哪种解决方案更好?
我知道我可以使用Hibernate.initilize()并遍历所有嵌套对象。但这很多编码。 另外我知道我可以在模型EAGER中建立关系,但readCustomerShallow()也会读取所有数据。
非常感谢。
编辑: 这个不起作用:
@Query("select c from Company as c " +
"join fetch c.departments as d " +
"join fetch d.persons p " +
"where c.id = ?1")
Company findOneDeep(long companyId);
org.hibernate.loader.MultipleBagFetchException:无法同时获取多个包