在Hibernate中检索图形结构

Cri*_*ris 5 java optimization orm hibernate graph

对象结构是这样的

  • 发票
    • 顾客
    • 日期
    • 有很多ProductLines(产品,数量,价格)
    • 有许多ServiceLines(服务,数量,价格)
    • 有很多PaymentOptions(PaymentType(支票,收据等),日期,总和)

如果我需要使用Hibernate检索给定时间段内的发票列表很容易使用延迟加载而不编写任何代码只需调用get ...但是存在DB调用过多的缺点,因此在多用户环境中解决方案不行.

使用普通JDBC,我使用3个查询解决了这个问题:Invoice和ProductLines,Invoice和ServiceLines以及Invoice和Payment Options之间的3个连接.之后我在内存中构造了对象.

同样可以用Hibernate完成我知道但是我的问题是没有加载图这样的东西,所以我可以传递发票列表和最小数量的调用(最佳一个)来检索数据?

Rus*_*ard 4

您可以使用带有连接获取的查询将整个对象图放入内存:

Query query = entityManager.createQuery("select distinct invoice from Invoice as invoice " 
            + "left join fetch invoice.productLines "                
            + "left join fetch invoice.serviceLines "
            + "left join fetch invoice.paymentOptions");
for (Object object : query.getResultList()) {
    // Code here
}
Run Code Online (Sandbox Code Playgroud)