本文介紹了休眠標準:DISTINCT ENTITIES、FETCH JOIN和MaxResults的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
當我從根元素(例如Company)向集合(例如Employees)發出帶有fetchMode聯接和Alias Left_out_Join的條件請求時,我無法對不同的公司進行分頁(使用MaxResults和FirstElement)。
criteria = sessionFactory.getCurrentSession().createCriteria(Company.class);
criteria.createAlias("employees", "employees", JoinType.LEFT_OUTER_JOIN);
criteria.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);
criteria.setFetchMode("employees", FetchMode.JOIN);
criteria.setFirstResult((pageNb - 1) * nbPerPage);
criteria.setMaxResults(nbPerPage);
如果我要求前20家公司,我只有3家,因為第一個結果有18名員工。
我希望得到要求的前20名,但員工要加載以優化延遲加載。
推薦答案
我發現這個post也有類似的情況。當您將結果限制在一個條件中時,Hibernate將在SQL查詢中應用該限制,而當您使用聯接/DISTINCT根實體時,在許多情況下,它將導致較小的結果列表。您報告的結果證實了這一點。
建議的解決方法是將別名的獲取模式更改為SELECT
。結果是將調用多個查詢,但肯定比每個元素的延遲加載成本更低。
這篇關于休眠標準:DISTINCT ENTITIES、FETCH JOIN和MaxResults的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,