通过使用QueryDsl谓词和spring jpa降序排序得到结果集的第一行

时间:2014-02-14 05:54:02

标签: spring web spring-data-jpa predicate querydsl

我是JPA的新手。我有一个查询,以便我得到结果集,只采取顶部的行。我不知道如何在春天JPA.And我不希望它使用@Query注释完成它,因为我被问到不要在代码中使用任何查询。这是我要转换的uery

我的查询

SELECT id,name FROM example_table ORDER BY id DESC LIMIT 1;

我在谓词文件中尝试过类似的内容:

public Predicate getLatest(){
 QExampleTable example = QExampleTable.exampleTable;
 return (Predicate) example.id.desc();     
}

这就是我的jpa存储库的样子:

public ExampleTable findOne(MyPredicate.getLatest());

但这不是很有效,我知道它不会清楚。但我真的不知道如何转换上面的查询。任何人都可以帮我解决这个问题

3 个答案:

答案 0 :(得分:2)

您只需使用不带谓词和存储库的QueryDSL即可。

List<ExampleTable> examples = new JPAQuery()
                .from(QExampleTable.exampleTable)
                .limit(1)
                .orderBy(new OrderSpecifier<>(Order.DESC, QExampleTable.exampleTable.id))
                .list(QExampleTable.exampleTable);

答案 1 :(得分:1)

您可以使用偏移或限制功能。

在你的情况下.limit(1)应该足够了

答案 2 :(得分:0)

这不会奏效,因为desc()会返回必须与OrderSpecifier一起使用的Query.orderBy()

以下情况可行,但不是纯粹的&#34;谓词:

public Predicate getLatest() {
  QExampleTable example = QExampleTable.exampleTable;
  return example.id.eq(new JPASubQuery().from(example).unique(example.id.max()));
}

我担心更清晰的解决方案是您提供CustomRepository +实施。