使用JPA选择前1个结果

deyfvvtc  于 2023-06-23  发布在  其他
关注(0)|答案(6)|浏览(147)

我只需要从DB中取出一个结果。我如何使用JPA做到这一点?

Select top 1 * from table

我尽力了
“从表t中选择t”

query.setMaxResults(1);

query.getSingleResult();

但没起作用还有别的主意吗

2w2cym1i

2w2cym1i1#

这样试试

String sql = "SELECT t FROM table t";
Query query = em.createQuery(sql);
query.setFirstResult(firstPosition);
query.setMaxResults(numberOfRecords);
List result = query.getResultList();

应该可以的

更新*

你也可以这样试试

query.setMaxResults(1).getResultList();
ckocjqey

ckocjqey2#

要在TypedQuery上使用getSingleResult,可以使用

query.setFirstResult(0);
query.setMaxResults(1);
result = query.getSingleResult();
bsxbgnwa

bsxbgnwa3#

2021 att:您可以在Spring Data JPA中使用TOP或FIRST
示例:

User findFirstByOrderByLastnameAsc();

User findTopByOrderByAgeDesc();

Page<User> queryFirst10ByLastname(String lastname, Pageable pageable);

Slice<User> findTop3ByLastname(String lastname, Pageable pageable);

List<User> findFirst10ByLastname(String lastname, Sort sort);

List<User> findTop10ByLastname(String lastname, Pageable pageable);

文档:https://docs.spring.io/spring-data/jpa/docs/2.5.4/reference/html/#repositories.limit-query-result

pdtvr36n

pdtvr36n4#

最简单的方法是使用**@Query和NativeQuery选项**,如下所示:

@Query(value="SELECT 1 * FROM table ORDER BY anyField DESC LIMIT 1", nativeQuery = true)
x33g5p2x

x33g5p2x5#

通过在实体类上指定@NamedNativeQuery注解或使用EntityManager.createNativeQuery方法来使用本机SQL查询。您需要使用适当的类指定ResultSet的类型,或者使用ResultSetMap。

nimxete2

nimxete26#

使用Pageable大小为1,并按您希望它应该工作的字段排序

@Query("from Cat t order by t.name desc")
  Page<Cat> findCats(Pageable page);

应该使用页面是

Pageable page = PageRequest.of(0, 1, Sort.by(Sort.Direction.DESC, "name"));

相关问题