我正在尝试使用spring数据分页机制在我的应用程序中实现无限滚动。
在我的应用程序中,我有一个类似于事件的实体,我们将其称为事件,它具有日期属性。
用户有事件。他有一些将来会发生的事件,有些已经过期,并且每个用户还有一个唯一的没有日期的“默认”事件-在数据库中表示为空。
在我的应用中,我需要在两个部分中显示事件:
a)活动事件-将来会发生的事件+默认事件
b)过期事件-日期已经过去的事件。
到目前为止,它的工作方式是我将向数据库请求用户的所有事件,然后在拥有所有事件的情况下,在客户端应用中应用自定义排序:
a)活动事件将按升序排序-首先是最接近今天的事件,然后是较新的事件。 “ null”事件进入此列表的底部。
b)过去的事件将按降序排列-首先是最接近今天的事件,然后是较旧的事件。
有什么方法可以实现而无需将两个调用分开,从而使分页的结果按这种方式排序?
我确实意识到这可能太复杂了,对此我感到抱歉。
预先感谢, 干杯
答案 0 :(得分:0)
您可以在Spring中创建自定义PageImpl<T>
,然后向其中添加各自的数据列表。
public Page<EventEntity> getEvents(Pageable pageable){
long pageSize = 30l;
// Sort this in ASC while querying from DB
List<EventEntity> list1 = eventRepository.findByEventType(EventType.active);
List<EventEntity> list2 = eventRepository.findByEventType(EventType.default);
// Sort this in DESC while querying from DB
List<EventEntity> list3 = eventRepository.findByEventType(EventType.expired);
// Add all the data into a final List
List<EventEntity> finalList = new ArrayList<EventEntity>();
finalList.addAll(list1);
finalList.addAll(list2);
finalList.addAll(list3);
return new PageImpl<>(finalList, pageable, pageSize);
}