使用Spring JPA / EclipseLink进行PostgreSQL查询的结果很大

时间:2011-03-14 22:06:16

标签: spring postgresql jpa eclipselink

众所周知,期望大型结果集的PostgreSQL查询最好执行设置自动提交和ResultSet.TYPE_FORWARD_ONLY(参见here)。但是,如何使用Spring JPA和EclipseLink实现这一点?有没有人经历过这个(特别是设置自动提交)?

干杯, 斯特芬

3 个答案:

答案 0 :(得分:1)

JPA提供程序应该处理低级连接细节,就像你正在谈论的那样。在JPA中,您可以通过在Query接口上调用setMaxResults()方法来限制返回的行数。然后,您可以使用setFirstResult()在运行时翻译结果集。 EclipseLink中的Postgres方言实现负责尽最大努力使与postgres的通信尽可能有效。

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

答案 1 :(得分:0)

当您使用JPA时,

autocommit off是默认模式。否则,您无法实现交易。我很确定结果集也只是默认转发。

答案 2 :(得分:0)

以下似乎对我有用。关键部分似乎是QueryHints.JDBC_FETCH_SIZE。此外,不缓存结果数据有很大帮助。

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
 }