2012-06-28 38 views
1

(JPA /休眠問題) 我有一個查詢到一個表,我們稱之爲「發佈」,從中我想檢索一行,映射到一個實體。 這個實體有五個一對多的關聯關係,這些關聯關係在不久的將來都會被使用,所以我想急於獲取它們。現在,這些一對多關聯中的每一個都有3到300之間的任意數量的行。總之,如果實際執行,查詢實際上會加載大約100萬行。休眠:分解查詢

所以,一個小預覽到廣義HQL查詢(括號內爲一些評論):

select rv, al, ... (blabla) from 
from Release rv 
left outer join fetch App app (on releaseId) 
left outer join fetch Appconfig ac (on appId) 
left outer join fetch Appbind ab (on appId) 
left outer join fetch Releaseconfig rc (on releaseId) 
left outer join fetch Somestuff st (on releaseId) 
left outer join fetch Points p (on releaseId) 
left outer join fetch Pointconfig pc (on pointId) 
left outer join fetch Pointstuff ps (on pointId) 
where rv.releaseId = :id 

現在,比方說,App有100行,AppConfig的和Appbind各20對每個應用標識; Releasconfig約15個,Somestuff約20個,另外分130個,Pointconfig約30個每個Point和Pointstuff每個Point約50個。 這將導致一個MASSIVE查詢!

有沒有辦法讓我分解查詢並讓Hibernate映射它們?我說,我要求的應用程序,AppConfig的和Appbind第一,那麼Releaseconfig本身和Somestuff本身,然後再點,Pointconfig和Poinstuff共...

謝謝, 克里斯

回答

0

,你可以到這通過使用查詢加載所需的數據,如您所示App,Appconfig和Appbind。所有其他你沒有強迫Hibernate加載的集合將由代理來表示。

然後當你需要下一個集合時,你可以使用Hibernate.initialize()傳遞代理強制Hibernate加載它。這將需要單獨的查詢。