Spring Data JPA:读取对象时在EAGER和LAZY之间切换

时间:2016-12-27 07:49:40

标签: hibernate spring-mvc spring-data spring-data-jpa lazy-loading

我的模型看起来像这样:

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:无法同时获取多个包

0 个答案:

没有答案