在Hibernate,Java中设置最大结果查询

时间:2018-07-18 21:19:38

标签: java postgresql hibernate

请帮帮我。 数据库是PostgreSQL + Java + Hibernate。 在№1底下有一个№1表,其中有400万行。也有一个基数№2,其中有一个表№2,其中有61 000行。 有一个有效的代码:

    @Override
public List<UserStatisticDto> findGroupedByUser(final PageInfoDto pageInfo) {
   final Query query = buildSortQuery(pageInfo.sort, StatisticEventEntity.FIND_GROUPED_BY_USER_QUERY, StatisticEventEntity.FIND_GROUPED_BY_USER);
    query.setFirstResult(0);
    query.setMaxResults(20);
    List<UserStatisticDto> list = toUserStatisticDto(query.getResultList());
    return getSubList(list, pageInfo);
}

private Query buildSortQuery(final SortInfoDto[] sort, final String sortQuery, final String nonSortQuery) {
        Query query;
        if(sort != null && sort.length > 0) {
            String queryString = sortQuery;
            query = getEntityManager().createQuery(queryString);
        } else {
            query = getEntityManager().createNamedQuery(nonSortQuery);
        }
        return query;
    }

    private List getSubList(List list, final PageInfoDto pageInfo){
        int startIndex = (pageInfo.pageNumber) * pageInfo.pageSize;
        int lastIndex = startIndex+ pageInfo.pageSize + 1;
        if (lastIndex > list.size()){
            return list.subList(startIndex, list.size());
        }
        return list.subList(startIndex, lastIndex);
    }

有类PageInfoDto:

public class PageInfoDto implements Serializable {
    public int pageNumber = 0;
    public int pageSize = 20;
    public SortInfoDto[] sort;

    public PageInfoDto() {
    }

    public int getFirst() {
        return this.pageNumber * this.pageSize;
    }
}

有一个查询数据库,并在表上获取统计信息。在№2的数据库中,其中有61 000行完成了采样。在№1数据库中,大约有10分钟完成了400万行采样...

尽管我写了这个事实,它仍然无法正常工作。我们必须等待大约10分钟。

发送请求并形成答案的时间很长。 您能告诉我如何限制休眠状态将不会一次从数据库中卸载所有400万行的最大阈值吗?

如何使休眠模式仅卸载所需数量的数据? 在page.html上,有一个表格,其中放置20行。 请帮助我,我将非常感谢您。

0 个答案:

没有答案