使用 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的主要内容,如果未能解决你的问题,请参考以下文章