2011-02-09 33 views

回答

0

據我所知,這是不可能我的Flex應用程序。你應該打開休眠會話來做到這一點。 在我的項目,我做你所需要的是這樣的:

我有春天的服務是這樣的:

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()方法。如果你需要使用getFullObject()方法的具體SomeObject實例的細節。

希望這會有所幫助。

2

GraniteDS連同其數據管理框架,可讓您透明地加載您的未啓動的關聯:請參閱文檔here。因此,基本上,您不必爲了初始化懶惰集合/代理而做任何特殊的事情,只需要在客戶端訪問其中的一個(例如詢問集合的大小),它就會觸發調用服務器並獲取未初始化的數據。

如果您不想或不能使用透明延遲加載,您需要編寫一個特定的初始化方法,該方法必須能夠訪問EntityManager,接收實體作爲參數,初始化所需的關聯併發送實體返回給客戶端。