使用Spring Data按日期升序排序

66

我试图使用Spring-Data-JPA在一个表中进行按ASC排序的应用程序,但是它给了我一个错误:

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();
4个回答

181
尝试在“全部”和“排序”之间加入“By”,就像这样:

尝试在“全部”和“排序”之间加入“By”,就像这样:

List<Foo> findAllByOrderByDateAsc();

1
这个答案的诀窍在于不需要编写@Query,只要以正确的方式命名方法,Spring-data就会生成查询。 - OscarG
1
对我来说,这将由QueryUtils.toExpressionRecursively()抛出的IllegalArgumentException更改为NullPointerException。我没有使用@Query。 - user1944491
9
多么奇怪的规定。谢谢你的提示! - delucasvb
我该如何动态地从前端设置列名? - Pranav MS
4
在Spring框架提供给我们的所有精巧抽象中,似乎语法并不是它们的强项。 - wild_nothing
相关的错误已被标记为“按设计工作”。 - cambunctious

11

我不认为你可以将findAll用作前缀。

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

select foo from Foo foo order by foo.date desc

2
为什么它不能解决问题?问题在于查询无效,我告诉他正确的查询是什么。 - JB Nizet

5

示例:

databaseDAO.findByUserNameOrderByCreatedDateDesc(username);

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

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

public List<RecentlyView>  findByUserNameOrderByCreatedDateDesc(String username);


}

2

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


那不是SQL,而是JPQL。 - JB Nizet
1
没错,是我犯了错误。@MaximeF 请参考 http://docs.spring.io/spring-data/jpa/docs/1.0.0.M1/reference/html/#jpa.query-methods.at-query - Bizmarck
@Query("SELECT f FROM foo f ORDER BY f.date DESC"),它无法工作。 - MaximeF
什么是异常? - Bizmarck
1
@MaximeF:Java是大小写敏感的。类的名称是Foo,而不是foo。 - JB Nizet
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接