如何使用延迟加载在Flex应用程序中加载我的实体。我有一个深度对象图
答案 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()方法。
希望这有帮助。