Mat*_*ias 9 spring jpa spring-data spring-data-jpa
我正在考虑将传统的jpa/dao解决方案迁移到Spring Data.
但是,我们的一个前端是SmartGWT,它们的数据绑定组件仅使用限制/偏移量逐步加载数据,这使得难以使用Pageable.
这会导致问题,因为不能确定限制/偏移是否可以最终转换为页码.(可能会有所不同,具体取决于用户如何滚动,屏幕调整大小等).
我查看了Slice等,但无法找到在任何地方使用限制/偏移值的方法.
想知道是否有人有任何指针?最好我想继续使用limit/offset,但是在我的Repository接口中使用它们而不必编写实现并像我现在那样手动设置它们(query.setMaxResults等)
编辑:澄清我遇到问题的原因 - 在smartgwt组件中初始和后续数据提取之间的限制/偏移可能不同.对于listgrid,第一次获取的限制可能设置为89,例如,因为那是屏幕上可见的行数,偏移量为0.但是,下一个请求可能有偏移量89,并且限制为50,因为这是组件的"datapagesize" "值为50,这就是我向下滚动时所取的东西.如果我在释放之前滚动到远处,它可能会取决于设置,取而代之的是行159-209.基本上,不能保证偏移量是任何东西的倍数.将偏移17,限制5转换为页面很难.
woe*_*ler 13
Pagebale实现确实使用limit
和offset
创建分页.的page
在构造值被用于生成在所述偏移值AbstractPageRequest
的类getOffset
的方法:
public int getOffset() {
return this.page * this.size;
}
Run Code Online (Sandbox Code Playgroud)
如果您只想使用limit
和offset
丢弃page
混合中的参数,请查看Web支持上的Spring Data文档,尤其是有关覆盖默认配置的部分.您可以创建自己的实现Pageable
,limit
并将其offset
作为构造函数参数和您自己的实现HandlerMethodArgumentResolver
来替换标准PageRequest
解析.快速而肮脏的例子:
可分页的实施
public class BetterPageRequest implements Pageable {
public BetterPageRequest(int limit, int offset){
this.limit = limit;
this.offset = offset;
}
// Other method implementations
}
Run Code Online (Sandbox Code Playgroud)
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]);
}
}
Run Code Online (Sandbox Code Playgroud)
Alm*_*zak 10
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;
}
}
Run Code Online (Sandbox Code Playgroud)
例如
Page<WashComment> washComments = washCommentRepository.findWashCommentByWashId_CarWashIdOrderByDateDesc(carWash, new OffsetLimitPageable(offsetNumberRepresentation,
limitNumberRepresentation > Config.getMaxLimitAmount() ? Config.getMaxLimitAmount() : limitNumberRepresentation));
Run Code Online (Sandbox Code Playgroud)
如果你想要它,请告诉我
归档时间: |
|
查看次数: |
18429 次 |
最近记录: |