【问题标题】:Is this a good way to select the latest post?这是选择最新帖子的好方法吗?
【发布时间】:2017-04-23 08:41:07
【问题描述】:

我正在使用子选择来选择最新的帖子。这是个好主意吗?

@Query("SELECT p FROM Post p INNER JOIN p.user WHERE p.user.username = :username AND p.updated = (SELECT MAX(p.updated) FROM Post p WHERE p.user.username = :username)")
Post findLatestByUsername(@Param("username") String username);

【问题讨论】:

  • 为什么不按Post创建日期和更新日期订购?
  • 因为返回的结果不止一个。
  • 将结果限制为 1。
  • HQL 无法做到这一点。
  • p.created 是仅日期还是日期时间?

标签: sql jpa hql


【解决方案1】:

我认为使用索引降序选择最新行的最佳方法

如果您在这些列上没有索引,请将username, updated 列设置为降序index,有关如何设置它的更多信息,您可以查看下面的链接

https://www.postgresql.org/docs/9.5/static/sql-createindex.html

那么你的选择会是这样的

SELECT * FROM Post p where p.user.username = :username LIMIT 1

您的阅读数据将在选择后已经下降排序,然后您可以选择 1 行,它将是最新行,数据按 username(并且它在 where 子句中)和 updated 列进行排序

关于HQL中的限制,你可以通过其他方式解决这个问题 请看下面的链接

https://groups.google.com/forum/#!topic/nhibernate-development/JYE3NDcTUEA

How do you do a limit query in HQL?

LIMIT in Postgres not supported in HQL?

【讨论】:

  • 1.那是 postgresql 特定的。 2. HQL 没有功能限制。
  • 有什么方法可以选择1行吗?
  • 创建一个只返回一个结果的查询。
  • 再看答案,我附上了3个关于限制的链接
  • 那不是 HQL。
猜你喜欢
  • 1970-01-01
  • 2015-11-02
  • 1970-01-01
  • 1970-01-01
  • 2011-12-12
  • 2012-07-28
  • 2011-10-11
  • 1970-01-01
  • 2023-03-11
相关资源
最近更新 更多