在JPA中,我使用setResultTransformer()
来过滤重复数据,因为我已经读过在查询时使用distinct
返回大数据集会降低性能。但是我的朋友说setResultTransformer()
将在大型数据集的情况下获取java堆内存,这将导致outofmemory异常。这是对的吗?
答案 0 :(得分:0)
setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY)
当然会占用很多记忆。并且它使用HQL或SQL的性能不会比distinct
好。
原因是Hibernate将从数据库加载所有数据并使用CriteriaSpecification.DISTINCT_ROOT_ENTITY
在内存中处理它。数据库可以使用一些优化来distinct
本身。