小编典典

setMaxResults用于Spring-Data-JPA注释?

spring

我正在尝试将Spring-Data-JPA合并到我的项目中。让我困惑的一件事是如何通过注释实现setMaxResults(n)?

例如,我的代码:

public interface UserRepository extends CrudRepository<User , Long>
{
  @Query(value="From User u where u.otherObj = ?1 ")
  public User findByOhterObj(OtherObj otherObj);
}

我只需one (and only one)要从otherObj 返回User,但找不到任何方法来注释maxResults。有人可以给我提示吗?

(mysql抱怨:

com.mysql.jdbc.JDBC4PreparedStatement@5add5415: select user0_.id as id100_, user0_.created as created100_ from User user0_ where user0_.id=2 limit ** NOT SPECIFIED **
WARN  util.JDBCExceptionReporter - SQL Error: 0, SQLState: 07001
ERROR util.JDBCExceptionReporter - No value specified for parameter 2

我找到了一个链接:https : //jira.springsource.org/browse/DATAJPA-147,我尝试但失败了。现在看来不可能了吗?为什么这么重要的功能没有内置在Spring-Data中?

如果我手动实现此功能:

public class UserRepositoryImpl implements UserRepository

我必须在中实现大量的预定义方法CrudRepository,这将是可怕的。

环境:spring-3.1,spring-data-jpa-1.0.3.RELEASE.jar,spring-data-commons-core-1.1.0.RELEASE.jar


阅读 578

收藏
2020-04-11

共1个答案

小编典典

你可以使用新引入的TopFirst关键字来定义查询方法,如下所示:

findTop10ByLastnameOrderByFirstnameAsc(String lastname);

Spring Data将自动将结果限制为你定义的数目(如果省略,则默认为1)。请注意,结果的排序在这里变得很重要(通过OrderBy示例中的子句或将Sort参数传递给方法)。在涵盖Spring Data Evans发布系列的新功能的博客文章中或在文档中了解更多内容。

对于以前的版本
为了只检索数据片段,Spring Data使用了分页抽象,该分页抽象Pageable在请求方带有接口,在Page事物的结果侧也带有抽象。所以你可以开始

public interface UserRepository extends Repository<User, Long> {

  List<User> findByUsername(String username, Pageable pageable);
}

并像这样使用它:

Pageable topTen = new PageRequest(0, 10);
List<User> result = repository.findByUsername("Matthews", topTen);

如果你需要知道结果的上下文(实际上是哪一页?它是第一个页面?总共有几页?),请Page用作返回类型:

public interface UserRepository extends Repository<User, Long> {

  Page<User> findByUsername(String username, Pageable pageable);
}

然后,客户端代码可以执行以下操作:

Pageable topTen = new PageRequest(0, 10);
Page<User> result = repository.findByUsername("Matthews", topTen);
Assert.assertThat(result.isFirstPage(), is(true));

如果你将其Page用作返回类型,我们并不是会触发要执行的实际查询的计数预测,因为我们需要找出总共有多少个元素来计算元数据。除此之外,请确保你确实为配备了PageRequest排序信息,以获得稳定的结果。否则,即使下面的数据没有更改,你可能会触发两次查询并获得不同的结果。

2020-04-11