2

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

4

2 回答 2

2

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

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

于 2012-04-23T18:11:30.813 回答
0

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

我有这样的春季服务:

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

此查询强制休眠加载定义为惰性的属性。

因此,如果您不需要完全加载 SomeObject 实例,您可以使用 getObjects() 方法。如果您需要有关具体 SomeObject 实例的详细信息,请使用 getFullObject() 方法。

希望这可以帮助。

于 2011-09-16T12:27:47.527 回答