Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 休眠条件,rowcount()仅适用于firstResult=0_Java_Hibernate_Pagination_Hibernate Criteria - Fatal编程技术网

Java 休眠条件,rowcount()仅适用于firstResult=0

Java 休眠条件,rowcount()仅适用于firstResult=0,java,hibernate,pagination,hibernate-criteria,Java,Hibernate,Pagination,Hibernate Criteria,我正在进行分页,并尝试为每个Rest api调用获取行数,发送firstResult和MaxResults with url,对于命名约定,我提到的firstResult作为pageNumber,MaxResults作为pageSize,当pageNumber为1(firstResult为0)时,所需的代码如下所示resultCount为我获取正确的计数,但当我传递的值大于1(FirstResult将大于0)时,计数将返回空值: Criteria criteria = session()

我正在进行分页,并尝试为每个Rest api调用获取行数,发送firstResult和MaxResults with url,对于命名约定,我提到的firstResult作为pageNumber,MaxResults作为pageSize,当pageNumber为1(firstResult为0)时,所需的代码如下所示resultCount为我获取正确的计数,但当我传递的值大于1(FirstResult将大于0)时,计数将返回空值:

    Criteria criteria = session().createCriteria(Manufacturer.class);
    criteria.add(Restrictions.eq("hospital.id", hospitalId));
    criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);

    // Implementing pagination
    if(pageNumber != null && pageSize != null){

        criteria.setFirstResult((pageNumber - 1) * pageSize);
        criteria.setMaxResults(pageSize);
    }

    List<Manufacturer> manufacturers = criteria.list();
    if(manufacturers == null || manufacturers.isEmpty()){
        return null;
    }

    // Reusing the same criteria for count
    criteria.setProjection(Projections.rowCount());
    criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
    Long resultCount = (Long)criteria.uniqueResult();
Criteria=session().createCriteria(Manufacturer.class);
标准.增加(限制.eq(“hospital.id”,hospitalId));
criteria.setResultTransformer(criteria.DISTINCT\u ROOT\u实体);
//实现分页
if(pageNumber!=null&&pageSize!=null){
条件.setFirstResult((页码-1)*页面大小);
标准.setMaxResults(页面大小);
}
列表制造商=标准。列表();
if(manufacturers==null | | manufacturers.isEmpty()){
返回null;
}
//重复使用相同的计数标准
criteria.setProjection(Projections.rowCount());
criteria.setResultTransformer(criteria.DISTINCT\u ROOT\u实体);
Long resultCount=(Long)criteria.uniqueResult();

附言:如果代码中有任何改进的余地,我会很感激的,我想你不能这样使用它。当我以前这样做时,我总是使用两个独立的标准,一个用于列表,另一个用于计数

然后,我从不将分页配置为条件计数。让我告诉你如何:

private Criteria prepareCriteriaCommon(Integer hospitalId){
    Criteria criteria = session().createCriteria(Manufacturer.class);
    criteria.add(Restrictions.eq("hospital.id", hospitalId));
    criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);

    return criteria;
}

...

//Your sample code
Criteria crtList = prepareCriteriaCommon(hospitalId);
Criteria crtCount = prepareCriteriaCommon(hospitalId);

// Implementing pagination
if(pageNumber != null && pageSize != null){
    crtList.setFirstResult((pageNumber - 1) * pageSize);
    crtList.setMaxResults(pageSize);
}

List<Manufacturer> manufacturers = crtList.list();
if(manufacturers == null || manufacturers.isEmpty()){
    return null;
}

crtCount.setProjection(Projections.rowCount());
crtCount.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
Long resultCount = (Long)crtCount.uniqueResult();
专用标准prepareCriteriaCommon(整数医院ID){
条件=会话().createCriteria(Manufacturer.class);
标准.增加(限制.eq(“hospital.id”,hospitalId));
criteria.setResultTransformer(criteria.DISTINCT\u ROOT\u实体);
退货标准;
}
...
//您的示例代码
标准crtList=准备临床试验(住院);
标准crtCount=prepareCriteriaCommon(医院ID);
//实现分页
if(pageNumber!=null&&pageSize!=null){
crtList.setFirstResult((页码-1)*页面大小);
crtList.setMaxResults(页面大小);
}
列表制造商=crtList.List();
if(manufacturers==null | | manufacturers.isEmpty()){
返回null;
}
crtCount.setProjection(Projections.rowCount());
crtCount.setResultTransformer(Criteria.DISTINCT\u ROOT\u实体);
Long resultCount=(Long)crtCount.uniqueResult();
这样,检索计数行的条件就不会受到分页的影响,这是不可取的。它工作得很好


希望有帮助

我想你不能这样使用它。当我以前这样做时,我总是使用两个独立的标准,一个用于列表,另一个用于计数

然后,我从不将分页配置为条件计数。让我告诉你如何:

private Criteria prepareCriteriaCommon(Integer hospitalId){
    Criteria criteria = session().createCriteria(Manufacturer.class);
    criteria.add(Restrictions.eq("hospital.id", hospitalId));
    criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);

    return criteria;
}

...

//Your sample code
Criteria crtList = prepareCriteriaCommon(hospitalId);
Criteria crtCount = prepareCriteriaCommon(hospitalId);

// Implementing pagination
if(pageNumber != null && pageSize != null){
    crtList.setFirstResult((pageNumber - 1) * pageSize);
    crtList.setMaxResults(pageSize);
}

List<Manufacturer> manufacturers = crtList.list();
if(manufacturers == null || manufacturers.isEmpty()){
    return null;
}

crtCount.setProjection(Projections.rowCount());
crtCount.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
Long resultCount = (Long)crtCount.uniqueResult();
专用标准prepareCriteriaCommon(整数医院ID){
条件=会话().createCriteria(Manufacturer.class);
标准.增加(限制.eq(“hospital.id”,hospitalId));
criteria.setResultTransformer(criteria.DISTINCT\u ROOT\u实体);
退货标准;
}
...
//您的示例代码
标准crtList=准备临床试验(住院);
标准crtCount=prepareCriteriaCommon(医院ID);
//实现分页
if(pageNumber!=null&&pageSize!=null){
crtList.setFirstResult((页码-1)*页面大小);
crtList.setMaxResults(页面大小);
}
列表制造商=crtList.List();
if(manufacturers==null | | manufacturers.isEmpty()){
返回null;
}
crtCount.setProjection(Projections.rowCount());
crtCount.setResultTransformer(Criteria.DISTINCT\u ROOT\u实体);
Long resultCount=(Long)crtCount.uniqueResult();
这样,检索计数行的条件就不会受到分页的影响,这是不可取的。它工作得很好


希望有帮助

在这种情况下,如果您接受答案,我将向您表示感谢;)在这种情况下,如果您接受答案,我将向您表示感谢;)