与JPA中的setResultTransformer()不同

时间:2016-03-04 09:13:26

标签: java hibernate jpa

在JPA中,我使用setResultTransformer()来过滤重复数据,因为我已经读过在查询时使用distinct返回大数据集会降低性能。但是我的朋友说setResultTransformer()将在大型数据集的情况下获取java堆内存,这将导致outofmemory异常。这是对的吗?

1 个答案:

答案 0 :(得分:0)

setResultTransformer(CriteriaSpecif‌​ication.DISTINCT_ROOT_ENTITY)当然会占用很多记忆。并且它使用HQL或SQL的性能不会比distinct好。

原因是Hibernate将从数据库加载所有数据并使用CriteriaSpecif‌​ication.DISTINCT_ROOT_ENTITY在内存中处理它。数据库可以使用一些优化来distinct本身。