在花岗岩ds懒惰装载

时间:2011-02-09 07:53:04

标签: graniteds

如何使用延迟加载在Flex应用程序中加载我的实体。我有一个深度对象图

2 个答案:

答案 0 :(得分:2)

GraniteDS及其数据管理框架允许您透明地加载未启动的关联:请参阅文档here。所以,基本上,你不需要做任何特殊的事情来初始化你的懒惰集合/代理,你只需要在客户端访问其中一个(例如询问集合的大小)它会触发调用服务器并获取未初始化的数据。

如果您不想或不能使用透明延迟加载,则需要编写一个特定的初始化方法,该方法必须能够访问EntityManager,接收您的实体作为参数,初始化所需的关联并发送实体回到客户端。

答案 1 :(得分:0)

AFAIK这是不可能的。您应该打开hibernate会话来执行此操作。 在我的项目中,我正在以这种方式做你需要的事情:

我有这样的春季服务:

public interface SomeObjectManager {
   List<SomeObject> getObjects();     // here we have lazy loading for SomeObject's properties
   SomeObject getFullObject(long objectId); // here we're loading full object
}

SomeObject的某些属性使用延迟加载。要加载它们,我使用HQL查询,如下所示:

SELECT s FROM SomeObject s
   LEFT JOIN FETCH s.child children
      LEFT JOIN FETCH children.items items
         LEFT JOIN FETCH items.property
WHERE s.id=:id

此查询强制hibernate加载定义为lazy的属性。

因此,如果您不需要完全加载SomeObject实例,则使用getObjects()方法。如果那时你需要有关具体SomeObject实例的细节,你可以使用getFullObject()方法。

希望这有帮助。