我正在考虑将我们传统的jpa/道解决方案迁移到Spring Data。
但是,我们的前端之一是SmartGWT,它们的数据库组件仅使用限制/偏移逐步加载数据,这使得难以使用Pagable。
这会导致问题,因为无法确定限制/偏移量最终是否可以转换为页码。(这可能因用户滚动方式、屏幕大小等而异)。
我查看了切片等,但无法找到在任何地方使用限制/偏移值的方法。
想知道有没有人有什么建议?最理想的情况是,我希望继续使用限制/偏移,但在我的存储库界面中使用它们,而不必像现在一样编写实现代码并手动设置它们(query.setMaxResults等)
编辑:为了澄清问题的原因-smartgwt组件中初始和后续数据获取之间的限制/偏移可能不同。例如,对于listgrid,第一次提取可能将限制设置为89,因为这是屏幕上可见的行数,偏移量为0。不过,下一个请求的偏移量可能为89,并且限制为50,因为这是组件的“datapagesize”值,所以当我向下滚动时,它将获取50。如果我在发布之前滚动到远下,根据设置,它可能取而代之的是第159-209行。基本上,无法保证偏移量是任何值的倍数。很难将偏移量17(限制为5)转换为一页。
public class OffsetLimitPageable extends PageRequest {
private int offset;
public OffsetLimitPageable(int offset, int limit){
super(offset,limit);
this.offset=offset;
}
@Override
public long getOffset(){
return this.offset;
}
}
和示例
Page<WashComment> washComments = washCommentRepository.findWashCommentByWashId_CarWashIdOrderByDateDesc(carWash, new OffsetLimitPageable(offsetNumberRepresentation,
limitNumberRepresentation > Config.getMaxLimitAmount() ? Config.getMaxLimitAmount() : limitNumberRepresentation));
如果这是你想要的,请告诉我
Pagebale实现确实使用限制
和偏移
来创建分页。构造函数中的page
值用于在AbstractPageRequest
classgetOffset
方法中生成偏移值:
public int getOffset() {
return this.page * this.size;
}
如果您只想使用限制
和偏移
并从组合中丢弃页面
参数,请查看Web支持上的Spring数据留档,特别是关于覆盖默认配置的部分。您可以创建自己的Pagable
实现,将限制
和偏移
作为构造函数参数,并实现自己的HandlerMachodArgumentResolver
以替换标准的PageRequest
解析。快速和肮脏的例子:
可分页实现
public class BetterPageRequest implements Pageable {
public BetterPageRequest(int limit, int offset){
this.limit = limit;
this.offset = offset;
}
// Other method implementations
}
HandlerMethodArgumentResolver实现
public class BetterPageableResolver implements HandlerMethodArgumentResolver {
@Override
public boolean supportsParameter(MethodParameter parameter){
return Pageable.class.equals(parameter.getParameterType());
}
@Override
public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer container, NativeWebRequest request, WebDataBinderFactory factory){
Map<String,String[]> params = request.getParameterMap();
return new BetterPageRequest(params.get('limit')[0], params.get('offset')[0]);
}
}
问题内容: 我正在使用Spring Data JPA,当我用来定义一个 WITHOUT 的查询时,它可以工作: 但是,如果我添加第二个参数,则将无法正常工作,Spring将解析该方法的名称,然后抛出 异常 。这是错误吗? 问题答案: 在Spring论坛上提出了一个类似的问题,指出要应用分页,必须派生第二个子查询。因为子查询引用的是相同的字段,所以您需要确保查询对引用的实体/表使用别名。这意味着您在
我有一个简单的JpaRepository和一个finder,它返回按名为“number”的属性降序排列的记录。“number”属性也是我的实体的@Id。这很好,但是有数千条记录,所以我想返回一个页面而不是列表。 如果我将查找器更改为以下内容,则排序不再起作用。我尝试过使用可分页参数的排序功能,但不起作用。还删除了OrderByNumberDesc,但结果相同。 EDIT-添加控制器方法 以下是我的
好吧,这很烦人,我真的不知道该怎么解决,所以事情是这样的。 获得了一个返回分页数据的应用程序,如下所示: 检索结果需要花费很长时间。 但是,如果我调用like(使用上面安装的相同可分页对象): 并且存储库上有: 而且,结果马上就会出现。 我假设,对于第一种永远需要的情况,Spring首先检索所有数据(不限制行),然后返回一个带有结果数量信息的页面。 不知道是否与注释有关。 我使用的是2.3.0。顺
本文向大家介绍MongoDB 使用Skip和limit分页,包括了MongoDB 使用Skip和limit分页的使用技巧和注意事项,需要的朋友参考一下 使用Skip和limit可以如下做数据分页: Code: 备注:可用于分页,limit是pageSize,skip是第n-1页*pageSize (n-1表示几 第1,2...页) skip表示跳过 多少条数据, 聚合管道的优
问题内容: 如何使用和在一起? personelRepository.java personelService.java personelController.java 当我运行它时,会出现这样的错误。但是,如果我像findAll(Pageable page)和findAll(Specification filter)一样分别调用findAll()函数,它将起作用。但是我不能一起使用。 问题答案:
我想用Spring Data Mongo实现分页。有很多教程和文档建议使用PagingAndSorting Repository,如下所示: 因此,因为PagingAndSorting Repository提供了用于分页查询的api,我可以像这样使用它: 我的问题是这里的findAll方法实际上是在哪里实现的?我需要自己编写它的实现吗?实现StoryRepo的StoryRepoImpl需要实现这个