hibernate - 使用 Spring Boot 重新创建 Twitter 涉及的问题
问题描述
又是我
关于 JpaRepository 的一个快速问题
我正在使用 Spring Boot 和 Hibernate 开发 Twitter 的镜像项目。我已经完成了 Twitter 的大部分功能的创建——发布、转发、评论等。现在我正在努力使这个网络应用程序更加用户友好,特别是关于应用程序从数据库加载帖子的方式。
目前,我的应用程序是这样工作的:每次用户登录时,系统都会从他/她的“关注列表”中加载所有帖子,这不好,因为如果这个用户关注数百人,可能会有数万个帖子同时加载——这不仅对服务器构成了巨大的负担,而且还耗费了用户的耐心。
所以我想切换到另一种加载帖子的方式。目前,我有这个想法:
每次用户登录系统时,都会有一个“lastLoginTime”,用@LastModifiedTime
. 每次有人发布内容时,都会创建一个“postTime”,使用@CreatedTime
. 每次用户登录系统时,服务器将加载上次登录时间前不超过 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)
推荐阅读
- c# - 2 个元素的列表(项目和数量),在 GroupBy 中获取 SUM 的问题
- python - 以两种方式从 Pandas DataFrame 中提取单列,区别?
- python - python - 密码学 - 生成新的 RSA 私钥
- ios - 即使存档成功,Xcode 存档也是空的
- python - 使用 Python 从域控制器中删除 DNS 'A' 记录
- python-3.x - 如何在 Python 3 中获取其代码给出的字节?
- php - while循环中的数组
- html - 在另一个 div 动画时显示一个 div 闪烁
- ionic-framework - CLI 仍然要求尝试 Ionic 4 beta
- python - 按键值拆分字典列表 - 与 pop 一样?