使用 Spring Boot 重新创建 Twitter 所涉及的问题



Me Again(英语:Status

(="qnd"Me Again关于 JpaRepository 的快速问题

我正在使用 Spring boot 和 Hibernate 开发 Twitter 的镜像项目。我已经完成了Twitter的大部分功能的创建 - 发布,转发,评论等。现在,我正在努力使这个 Web 应用程序更加用户友好,特别是关于应用程序从数据库加载帖子的方式。

目前,我的应用程序是这样工作的:每次用户登录时,系统都会从他/她的"关注列表"中加载所有帖子,这并不好,因为如果这个用户关注数百人,可能会同时加载数万个帖子 - 这不仅对服务器构成巨大负担, 但也消耗了用户的耐心。

所以我想切换到另一种加载帖子的方式。目前,我有这个想法:

每次用户登录系统时,都会有一个"lastLoginTime",使用@LastModifiedTime创建。每次有人发布内容时,都会有一个用@CreatedTime创建的"postTime"。每次用户登录系统时,服务器都会加载在上次登录时间前不超过 24 小时发布的帖子。

更具体地说。假设我在上午 8:00 登录系统。该系统应该加载昨天上午 8:00 之后发布的帖子。

因为我使用的是JpaRepository。我打算使用@Query来注释该方法。但是我就是想不出一个可能的方法来写一个好的JPQL来实现这个目标。有人可以帮我解决这个问题吗?我已经完成了创建lastLoginTime和postTime - 顺便说一句。

提前致谢 真诚地

'

遗憾的是,Hibernate没有很多日期函数。因此,您需要尝试调用数据库的本机 DATE 函数来执行此操作。另一种选择是始终保存在新列中,其中包含原始发布日期一天的发布日期信息。

使用新列,您只能:

SELECT post FROM Post post 
WHERE post.postTimeToLoad >= 
(SELECT user.lastLoginTime FROM User user WHERE user.id = :idLoggerUser)

如果您可以使用数据库中的本机函数,请参阅使用DATE_SUB函数的 MySql 示例:

SELECT post FROM Post post 
WHERE DATE(DATE_SUB(post.postTime, INTERVAL 1 DAY)) >= 
(SELECT user.lastLoginTime FROM User user WHERE user.id = :idLoggerUser)

最新更新