众所周知,需要大型结果集的PostgreSQL查询最好设置为auto-commit off和ResultSet.TYPE_FORWARD_ONLY (参见here)。然而,我如何结合使用Spring JPA和EclipseLink来实现这一点呢?有没有人有过这样的经验(特别是关闭自动提交)?
干杯,斯特芬
发布于 2011-03-15 06:10:47
JPA提供程序应该处理您正在讨论的低级连接细节。在JPA中,您可以限制通过在查询接口上调用setMaxResults()方法返回的行数。然后,您可以使用setFirstResult()在运行时对结果集进行分页。Postgres方言在EclipseLink中的实现负责尽其所能使与postgres的通信尽可能有效。
http://download.oracle.com/javaee/5/api/javax/persistence/Query.html
发布于 2011-03-15 06:14:56
自动提交关闭是使用JPA时的默认模式。否则,您将无法实现事务。我非常确定结果集在默认情况下也是转发的。
发布于 2015-02-26 11:22:12
下面的方法似乎对我很有效。关键部分似乎是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
}https://stackoverflow.com/questions/5305162
复制相似问题