java - 根据点赞数和创建时间对实体进行评分

标签 java database spring hibernate calculated-columns

从数据库中读取时,我想根据两个因素对我的 Post 实体进行排序:

  • 点赞数(越多越好)
  • 年龄(越新越好)

目前我是这样实现的(作为计算值):

@Entity
public class Post {

    // divide timestamp by a day length so after each day score decrements by 1
    @Formula("UNIX_TIMESTAMP(creation_date_time) / 24 * 60 * 60 * 1000 + likes_count")
    private long score;

    @CreationTimestamp
    private LocalDateTime creationDateTime;

    @Min(0)
    private long likesCount;
}

它工作正常但可能不是最好的方法,因为:

  1. 我认为 RDBMS 无法为 score 属性创建任何索引。
  2. 硬编码函数UNIX_TIMESTAMP() 特定于MySQL。因此,如果我想在我的测试环境中使用另一个数据库(比如 H2),这将导致问题。

最佳答案

使用数据库触发器来更新/维护这些副聚合表。为这些事情运行繁重的计划作业(这会导致负载峰值)真的没有意义......

此外,WHERE 子句下面永远不会使用索引。从来没有。

UNIX_TIMESTAMP(creation_date_time) / 24 * 60 * 60 * 1000 + likes_count

关于java - 根据点赞数和创建时间对实体进行评分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52394246/

相关文章:

linux - kthreaddi 非常高的 CPU

java - Spring-Hateoas Traverson 如何从三个表中获取信息

java - 在测试中使用 Spring @ConfigurationProperties 读取 map

mysql - SQL > 选择多行以获得单个结果

database - 如何修复 "Unable to add data connection. The IVsDataConnectionDialog could not be initialized"错误?

java - 有 2 个按钮影响同一个标签

java - 从 swagger 导入后保存会导致 NullPointerException

java - 了解 Spring JPA 底层原生查询

java - Interned 字符串不在 permgen 中?

java - JPanel 的 JButtons 自定义绘图出现图形故障