2016-03-04 33 views
0

在JPA中,我使用setResultTransformer()來過濾重複的數據,因爲我已經閱讀過在查詢中使用distinct,返回大數據集會降低性能。但我的朋友說,setResultTransformer()將採取java堆內存的情況下,大數據集,這將導致outofmemory異常。這是正確的嗎?JPA中的Distinct vs setResultTransformer()

+0

您使用哪種結果轉換器? –

+0

typedQuery.unwrap(org.hibernate.Query.class).setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY); –

回答

0

setResultTransformer(CriteriaSpecif‌​ication.DISTINCT_ROOT_ENTITY)當然會佔用大量的內存。並且它不會比使用HQL或SQL的distinct更好。

原因是Hibernate會加載數據庫中的所有數據並使用CriteriaSpecif‌​ication.DISTINCT_ROOT_ENTITY在內存中處理它。數據庫可以使用一些優化來做distinct本身。

+0

好的感謝評論。如果你有任何證據,也可以發佈。我認爲hibernate足夠聰明,能夠以有效的方式使用會話或其他任何東西來處理內存利用率。 –

+0

@viveksharma爲了處理數據,Hibernate需要通過網絡檢索一個例子。你也可以使用變壓器。沒關係。但認爲它有更多的表現是錯誤的。 –

+0

好的,謝謝...... –