使用JPA选择前1个结果

pri*_*inn 40 java jpa

我需要从DB只带一个结果.我怎么能用JPA做到这一点?

Select top 1 * from table
Run Code Online (Sandbox Code Playgroud)

我试过了

"从表格中选择t"

query.setMaxResults(1);

query.getSingleResult();
Run Code Online (Sandbox Code Playgroud)

但没有奏效.还有其他想法吗?

Jor*_*rge 54

试试这样吧

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

它应该工作

UPDATE*

你也可以这样试试

query.setMaxResults(1).getResultList();
Run Code Online (Sandbox Code Playgroud)


小智 20

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

query.setFirstResult(0);
query.setMaxResults(1);
result = query.getSingleResult();
Run Code Online (Sandbox Code Playgroud)

  • 是否需要使用setFirstResult(0)? (3认同)

Rod*_*o R 16

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);
Run Code Online (Sandbox Code Playgroud)

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


Aym*_*bsi 6

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

@Query(value="SELECT 1 * FROM table ORDER BY anyField DESC LIMIT 1", nativeQuery = true)
Run Code Online (Sandbox Code Playgroud)

  • 不回答这个问题.有人问过JPA.例如,这不适用于Oracle (10认同)
  • 您可以更改查询以匹配 Oracle。 (2认同)