spring - 使用 Spring Pageable 对动态计算的值进行排序
问题描述
我有以下实体:
@Entity
@Table(name = "events")
public class Event {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private OffsetDateTime startTime;
private OffsetDateTime endTime;
private Long duration;
public void setDuration() {
if (Objects.nonNull(startTime) && Objects.nonNull(endTime)) {
duration = Duration.between(startTime, endTime).toSeconds();
}
}
}
它代表系统中可能持续一段时间的某些事件。创建新实体时,startTime
设置为OffsetDateTime.now()
。duration
属性在事件完成并设置时endTime
设置。
Event
获取实体时,动态duration
计算为Duration.between(startTime, OffsetDateTime.now()).toSeconds()
.
我正在尝试使用和对象来获取Event
实体,以便轻松地对对象进行排序:Specification
Pageable
eventRepository.findAll(Specification, Pageable)
duration
可以想象,对于未完成的事件(如DB 中设置为) ,排序不起作用null
。在从数据库中获取属性时,是否有可能以某种方式设置属性的默认值?
解决方案
如果需要,您可以添加一个@Formula("coalesce(duration, 0)") int durationForSort;
字段并按此排序。
推荐阅读
- go - 如何获取 go 包的统计信息?
- c++ - 使用 libcurl 下载功能,但它工作不完整
- r - 我想在 for 循环中为每次迭代分配和存储一个新值
- python - 如何使用 Chalice 处理 DynamoDB 流事件
- reactjs - Reactjs - 主细节导航 - 回去时主应该在同一个位置
- android - 如何在后台设置警报或通知作为服务并使其即使在应用程序关闭时也能运行
- html - 在 html 中使用太多插槽有哪些性能影响以及如何测试每个插槽的性能?
- php - sqlsrv_has_rows() 返回 FALSE 但有记录 [PHP]
- node.js - Node 与 Docker 中的集群
- mongodb - Mongodb聚合框架性能