2011-09-30 81 views
3

我想知道什么最好的方法是加载惰性加载对象的嵌套值。我提供了一个例子来帮助更好地解释这一点。HQL /嵌套预先加载

public class A{ 
    private B b; //Lazy loaded 
    private C c; //Lazy loaded 
    private D d; //Lazy loaded 
} 
public class B{ 
    private E e; //Lazy loaded 
    private F f; //Lazy loaded 
} 
public class C{ 
} 
public class D{ 
} 

正如我想做一个例子:

System.out.println(a.getB().getE()); 

如果我跑了上面的说法我会得到一个懒惰的负载例外。

我总是可以做到以下几点:

for (A a : somePossiblyLargeList) { 
    org.hibernate.Hibernate.initialize(a.getB().getE()); 
} 

但很明显的表现回敬。

有没有一种方法可以编写一个自定义HQL查询,该查询返回预填充了那些特定嵌套字段的对象?

谢谢!

回答

6

当然。

在HQL查询

使用join fetch,如Hibernate reference documentation解释(你应该读):

select a from A a left join fetch a.b b left join fetch b.e e where ... 
+0

优秀,我会检查出来。谢谢! – user973479

+0

我认为我的实际情况比我的例子有点棘手......这是A <-> B与称为A_Lnk_B的链接表之间的多对多映射。所以,A类包含一组Set 。从那个列表中,我必须迭代每个B的ID。然后,我将B中的那些ID找到E.我很难概念化这将如何存储回到一个Java A对象中... – user973479

+0

从A中选择一个左连接获取a.aLinkBs alb左连接获取alb.bb左连接获取be在哪里... –