我是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());
但这不是很有效,我知道它不会清楚。但我真的不知道如何转换上面的查询。任何人都可以帮我解决这个问题
答案 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 +实施。