【问题标题】:Set the fetch size with Spring Data使用 Spring Data 设置获取大小
【发布时间】:2013-12-15 13:49:33
【问题描述】:

对于大型结果集,增加获取大小很重要。关于如何设置 Spring 的 JdbcTemplate 的 fetch 大小已经有很多讨论。但是,我们通常使用 Spring Data 进行数据库访问。假设我们使用 JPA 和 Hibernate 作为提供者,如何设置 Spring Data 查询的获取大小?

【问题讨论】:

  • 如何设置 fetch-size 取决于使用的底层技术(jdbc、jpa 等)以及 JPA 的实现者(Hibernate、OpenJPA 等)。
  • 我已经添加了spring-data-jpa 标签,但现在编辑了我的问题以更明确地说明这一点。
  • 你读过the hibernate documentation吗?这基本上与 Spring Data JPA 无关,但都与配置底层容器有关。

标签: spring-data spring-data-jpa


【解决方案1】:

这取决于您要设置的内容。如果你想要它全局,只需将它作为一个属性添加到你的 persistence.xml 中(或者你配置EntityManagerFactory 的方式是什么)。对于休眠,这意味着添加 hibernate.jdbc.fetch_size 属性。

<property name="hibernate.jdbc.fetch_size" value="50" />

如果您想为某些查询指定它,请在 Query 对象上使用来自 JPA 的查询提示。

TypedQuery<Foo> q = em.createTypedQuery("some hql here", Foo.class);
q.setHint("org.hibernate.fetchSize", "100");

或者在使用 Spring Data JPA 时,在接口方法上使用 @QueryHints 注释。可以应用于有@Query和没有@Query的两种方法。

@QueryHints(@javax.persistence.QueryHint(name="org.hibernate.fetchSize", value="50"))
List<Foo> findAll();

链接

  1. 休眠documentation
  2. Spring Data JPA reference | javadoc
  3. JPA 2 查询提示javadoc
  4. List of query hints 用于休眠

【讨论】:

  • 接受您的回答,因为它有效。但是对于 JPA(和 Spring Data)我必须使用特定于提供程序的配置,而在 JDBC 中它只是对 Statement 的简单调用,这不是很奇怪吗?
  • JPA 完全是关于抽象出 JDBC 并且由于 fetchsize 没有标准提示(但是),您将不得不使用提供程序特定的提示。也许在更新的 JPA 版本中他们会添加这些东西。
  • 返回列表是否意味着它查询所有对象?
猜你喜欢
  • 1970-01-01
  • 2021-03-13
  • 2021-07-29
  • 2019-11-18
  • 1970-01-01
  • 2014-09-02
  • 2018-02-17
  • 2021-08-16
  • 1970-01-01
相关资源
最近更新 更多