2016-03-04 31 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

好的,谢谢...... –