Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.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 如何在SpringDataJPA中将分页与条件查询结合起来?_Java_Spring_Jpa_Spring Data_Spring Data Jpa - Fatal编程技术网

Java 如何在SpringDataJPA中将分页与条件查询结合起来?

Java 如何在SpringDataJPA中将分页与条件查询结合起来?,java,spring,jpa,spring-data,spring-data-jpa,Java,Spring,Jpa,Spring Data,Spring Data Jpa,我使用PagingAndSortingRepository和findAll(Pageable Pageable)方法来分页数据。我认为没有办法提供任何条件。例如,有时我需要选择和分页地址,其中city=NY。有什么方法可以同时提供条件和分页吗?对于分页,您需要两种方法,如getCount(Pageable Pageable)和findAll(Pageable Pageable) 然而,在Hibernate中利用这个功能是微不足道的。如果您有任何HQL查询,只需执行以下操作: public Lon

我使用PagingAndSortingRepository和findAll(Pageable Pageable)方法来分页数据。我认为没有办法提供任何条件。例如,有时我需要选择和分页地址,其中city=NY。有什么方法可以同时提供条件和分页吗?

对于分页,您需要两种方法,如getCount(Pageable Pageable)和findAll(Pageable Pageable)

然而,在Hibernate中利用这个功能是微不足道的。如果您有任何HQL查询,只需执行以下操作:

public Long getCount(Pageable pageable) {
    Query q = session.createQuery("Select count(t) From TableClass  t where t.city = 'NY'");
    Long cnt = (Long) q.uniqueResult();
    return cnt;
}

public List<TableClass> findAll(Pageable pageable) {
     Query q = session.createQuery("From TableClass  t where t.city = 'NY'");
     q.setFirstResult(start);
     q.setMaxResults(length);
     List<TableClass> tableClasslist = q.list();
     return tableClasslist;
}
public Long getCount(可分页){
Query q=session.createQuery(“从TableClass t中选择计数(t),其中t.city='NY'”);
Long cnt=(Long)q.uniqueResult();
返回cnt;
}
公共列表findAll(可分页){
Query q=session.createQuery(“来自TableClass t,其中t.city='NY'”);
q、 setFirstResult(开始);
q、 setMaxResults(长度);
List tableClasslist=q.List();
返回表类列表;
}
同样,如果您有一个条件查询,它实际上是相同的:

public Long getCount(Pageable pageable) {
    Criteria c = session.createCriteria(TableClass.class);
    c.setProjection(Projections.rowCount()); 
    Long cnt = (Long) c.uniqueResult();
    return cnt;
}

public List<TableClass> findAll(Pageable pageable) {
    Criteria c = session.createCriteria(TableClass.class);
    c.setParameter("city","NY");
    c.setFirstResult(start);
    c.setMaxResults(length);
    List<TableClass> tableClasslist = c.list();
    return tableClasslist ;
}
public Long getCount(可分页){
条件c=session.createCriteria(TableClass.class);
c、 setProjection(Projections.rowCount());
长cnt=(长)c.uniqueResult();
返回cnt;
}
公共列表findAll(可分页){
条件c=session.createCriteria(TableClass.class);
c、 设置参数(“城市”、“纽约”);
c、 setFirstResult(开始);
c、 setMaxResults(长度);
List tableClasslist=c.List();
返回表类列表;
}

分页和排序存储库只是在分页模式中添加了非常基本的CRUD方法。如所述,您可以简单地将
Pageable
参数添加到您定义的任何查询方法中,以实现此查询的分页

interface CustomerRepository implements Repository<Customer, Long> {

  Page<Customer> findByLastname(String lastname, Pageable pageable);

  List<Customer> findByFirstname(String firstname, Pageable pageable);
}
接口CustomerRepository实现存储库{
PageFindBylastName(字符串lastname,可分页);
列出findByFirstname(字符串firstname,可分页);
}

第一种方法将返回一个
页面
,其中包含页面元数据,如可用元素总数等。为了计算此数据,它将触发对派生查询的额外计数查询。第二个查询方法返回普通切片结果集,而不执行计数查询。

谢谢您的帮助。我寻找JPA解决方案,但DataNucleus从问题的标签中删除了JPA。我使用hibernate标记表示hibernate是我的持久性提供者。Hello@Olivier和Pageagle我不知道在哪里指定
偏移量
页面请求
只接受
页面
大小
。我真的不明白为什么我必须做
page*size
才能得到我的
偏移量。有没有办法使用
offset
而不是
page
?原因
PageRequest
暴露
page
size
,因为只有
offset
是不够的,因为您仍然需要
size
。分页的概念通常意味着以页面为中心的数据视图,这就是我们在这里所表达的。但是,没有什么可以阻止您提出自己的
Pageable
实现,它可以处理偏移量和大小。我们如何将分页与查询API结合使用?很好的解释!!