我有一個目錄類型結構表示爲實體,即認爲目錄實體和文件實體。Hibernate遞歸獲取連接不遞歸獲取所有的孩子
該目錄實體具有一個文件實體和一個目錄實體集合的集合。
我想獲取根目錄和'預加載'所有目錄和那裏的文件。
我想:
String queryString = "SELECT DISTINCT d FROM " +
Directory.class.getSimpleName() +
" d LEFT JOIN FETCH d.files LEFT JOIN FETCH d.directories child LEFT JOIN FETCH child.files LEFT JOIN FETCH child.directories WHERE f.root = :isRoot);
Query query = em.createQuery(queryString);
query.setParameter("isRoot", true);
Directory dir = (Directory) query.getSingleResult();
的查詢工作,它只是不會預先加載的一切。我得到所有的根目錄和根文件,但是當我開始進入子目錄並獲取文件查詢時。 I.E.這似乎是遞歸不起作用。
我也嘗試只是一個連接抓取(我認爲這確實內部聯接提取),沒有運氣。
任何想法?
它肯定不會!如果您閱讀了文檔,則指出:通常,獲取連接通常不需要分配別名,因爲不應在where子句(或任何其他子句)中使用關聯的對象。關聯的對象也不會直接返回到查詢結果中。相反,它們可以通過父對象訪問。你可能需要一個別名的唯一原因是,如果你遞歸連接抓取進一步收集:從貓 如貓 內連接抓取cat.mate 左加入取cat.kittens孩子 LEFT JOIN因此,如果取child.kittens – lostintranslation 2012-03-20 19:01:58
你在那篇文章中讀到了更多這是我正在尋找的:'雖然不可能寫出你所要求的遞歸查詢,但是可以用HQL熱切地獲取層次結構;這樣做至少可以讓你在內存中遍歷樹,而不必爲每個級別敲擊數據庫。 select n from node n left join fetch n.Children' – lostintranslation 2012-03-20 19:04:52
I stand corrected =) – esaj 2012-03-20 19:20:22