当前位置: 首页 > 面试题库 >

setMaxResults用于Spring-Data-JPA注释?

姚星宇
2023-03-14
问题内容

我正在尝试将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


问题答案:

你可以使用新引入的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排序信息,以获得稳定的结果。否则,即使下面的数据没有更改,你可能会触发两次查询并获得不同的结果。



 类似资料:
  • 问题内容: 我正在尝试将Spring-Data-JPA合并到我的项目中。让我困惑的一件事是如何通过注释实现setMaxResults(n)? 例如,我的代码: 我只需one (and only one)要从otherObj 返回User,但找不到任何方法来注释maxResults。有人可以给我提示吗? (mysql抱怨: ) 我找到了一个链接:https : //jira.springsource

  • 我正在学习Spring Data JPA,在建立这两个表之间的关系时遇到了一些问题: 具有列id、name、product_type_id的产品表 product_type表,列id,名称 一个产品只能有一种类型。一个类型可以与许多产品相关联。 在我的实体类中,我将在哪里使用@OnetoMore和@ManytoOne注解?

  • 我有一个实体: 而听众: 我正在使用为这个实体(1.4.1)和EclipseLink生成的Spring Data。代码行为如下所示: 这个问题在2009年已经有人描述过了,但是他们没有提出任何解决方案。不知道有没有人有办法解决?

  • Spring Data JPA在JPA上又做了一层封装,只要编写接口就够了,不用写一行实现代码,CRUD方法啦,分页啦,自动将findByLoginName()的方法定义翻译成适当的QL啦都由它包了,以前每个项目自己写的BaseDao可以取消了。 public interface UserDao extends PagingAndSortingRepository<User, Long>

  • Spring Data JPA 的目标是通过让一些必须的工作变得更简单,来显著提高数据访问层的实现。作为一个开发者,你写你的仓库界面,包括自定义查询方法,而 Spring 给你提供自动实现。 特性 对建立基于Spring 和 JPA 的库的支持 支持 Querydsl predicates 和安全类型的 JPA 查询 Transparent auditing of domain class Pag