首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Spring JPA/EclipseLink进行PostgreSQL查询时的大量结果

使用Spring JPA/EclipseLink进行PostgreSQL查询时的大量结果
EN

Stack Overflow用户
提问于 2011-03-15 06:06:16
回答 3查看 1.5K关注 0票数 2

众所周知,需要大型结果集的PostgreSQL查询最好设置为auto-commit off和ResultSet.TYPE_FORWARD_ONLY (参见here)。然而,我如何结合使用Spring JPA和EclipseLink来实现这一点呢?有没有人有过这样的经验(特别是关闭自动提交)?

干杯,斯特芬

EN

回答 3

Stack Overflow用户

发布于 2011-03-15 06:10:47

JPA提供程序应该处理您正在讨论的低级连接细节。在JPA中,您可以限制通过在查询接口上调用setMaxResults()方法返回的行数。然后,您可以使用setFirstResult()在运行时对结果集进行分页。Postgres方言在EclipseLink中的实现负责尽其所能使与postgres的通信尽可能有效。

http://download.oracle.com/javaee/5/api/javax/persistence/Query.html

票数 1
EN

Stack Overflow用户

发布于 2011-03-15 06:14:56

自动提交关闭是使用JPA时的默认模式。否则,您将无法实现事务。我非常确定结果集在默认情况下也是转发的。

票数 0
EN

Stack Overflow用户

发布于 2015-02-26 11:22:12

下面的方法似乎对我很有效。关键部分似乎是QueryHints.JDBC_FETCH_SIZE。此外,不缓存结果数据也有很大帮助。

代码语言:javascript
复制
Query q = em.createNamedQuery("name");
q.setHint(QueryHints.CURSOR, HintValues.TRUE);
q.setHint(QueryHints.CURSOR_PAGE_SIZE, 1000);
q.setHint(QueryHints.MAINTAIN_CACHE, HintValues.FALSE);
q.setHint(QueryHints.JDBC_FETCH_SIZE, 1000);

CursoredStream cursor = (CursoredStream)q.getSingleResult();
while(cursor.hasNext()) {
    MyObject o = (MyObject)cursor.next();
    // do something wit data
 }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5305162

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档