我正在使用JPA2及其Criteria API從數據庫中選擇我的實體。實現是WebSphere Application Server上的OpenJPA。我所有的實體都使用Fetchtype = Lazy建模。jpa使用標準api在多個級別上實現惰性獲取實體
我從數據庫中選擇一些符合條件的實體,並希望一次加載子表中的所有嵌套數據。 如果我有地方臺被接合一對多表B中的數據模型,我可以在我的條件查詢使用取子句:
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<A> cq = cb.createQuery(A.class);
Root<A> root = cq.from(A.class);
Fetch<A,B> fetch = root.fetch(A_.elementsOfB, JoinType.LEFT);
這工作得很好。我得到一個元素A,並且它的所有元素都被正確填充。 現在表B與表C有一對多的關係,我也想加載它們。所以,我添加以下語句到我的查詢:
Fetch<B,C> fetch2 = fetch.fetch(B_.elementsOfC, JoinType.LEFT);
但是這不會做任何事情。
有人知道如何在一個查詢中獲取多級實體嗎?
非常感謝您的回答。但是在你指出的文檔文章中有一個JPQL的例子: 'SELECT x FROM Magazine x join fetch x.articles a join fetch a.publishers p WHERE x.title ='JDJ'' 有表格x,a和p關係x-> a和a-> p。這正是我想用標準API做的事情。 – 2012-01-16 15:04:51
你沒有仔細閱讀。這是導致語法錯誤的查詢的例子。該查詢之前的句子是:「以下查詢將導致語法錯誤:」。你想做什麼不起作用。 – 2012-01-16 18:24:40
哦,你說得對。所以我只能說:Ooops。但無論如何......有沒有什麼做法可以解決這個問題?我想在這個世界上有很多人想要拿兩張以上的桌子。我必須先加入第二個表格還是手動讀取其他數據?最佳做法是什麼? – 2012-01-16 19:19:34