使用 Spring Data 按日期排序 ASC

Posted

技术标签:

【中文标题】使用 Spring Data 按日期排序 ASC【英文标题】:Order By Date ASC with Spring Data 【发布时间】:2013-11-13 01:11:14 【问题描述】:

我尝试按 ASC 的顺序在表上使用 Spring-Data-JPA 制作应用程序,但它给了我一个错误:

Invalid derived query! No property asc found for type java.util.Calendar

为什么?

List<Foo> findAllOrderByDateAsc();

@Query("SELECT * FROM foo ORDER BY date ASC")
List<Foo> findAllOrderByDateAsc();

【问题讨论】:

【参考方案1】:

尝试在“All”和“Order”之间添加“By”,如下所示:

List<Foo> findAllByOrderByDateAsc();

【讨论】:

这个答案的诀窍是不需要编写@Query,只需以正确的方式命名方法 Spring-data 将生成查询 ok 对我来说,这会将 IllegalArgumentException 更改为 QueryUtils.toExpressionRecursively() 抛出的 NullPointerException。我没有使用@Query。 多么奇怪的规则。感谢您的提示! 我怎样才能让列名是从前端动态获取的。?? 在 Spring 框架为我们提供的所有出色抽象中,事实证明它们还没有语法。【参考方案2】:

我认为你不能使用 findAll 作为前缀。

关于查询,select * 不是有效的 JPQL。应该是

select foo from Foo foo order by foo.date desc

【讨论】:

为什么不能解决问题?问题是查询无效,我告诉他正确的查询是什么。【参考方案3】:

date 是 SQL 中的保留字。例如,尝试将表属性更改为foo_date,并将查询重写为SELECT * FROM foo ORDER BY foo_date DESC

【讨论】:

那不是 SQL。这是 JPQL。 正确。我的错。 @MaximeF 见docs.spring.io/spring-data/jpa/docs/1.0.0.M1/reference/html/… 它不工作 @Query("SELECT f FROM foo f ORDER BY f.date DESC") 有什么异常? @MaximeF:Java 区分大小写。类的名称是 Foo,而不是 foo。【参考方案4】:

例子:

databaseDAO.findByUserNameOrderByCreatedDateDesc(username);

根据用户名和排序创建日期列出用户。

@Repository
public interface DatabaseDAO extends JpaRepository<User,Integer> 

public List<RecentlyView>  findByUserNameOrderByCreatedDateDesc(String username);



【讨论】:

以上是关于使用 Spring Data 按日期排序 ASC的主要内容,如果未能解决你的问题,请参考以下文章

获取 Spring Data 上按日期排序的最后记录

按 ASC 列排序,但首先是 NULL 值?

DataTables:按纪元时间排序

使用数据表按西班牙日期排序

Spring Boot请建议自定义查询

如何按日期时间和整数对光标进行排序