2011-03-14 106 views

回答

1

的JPA提供商應該是在處理低級別的連接細節,如你所談論的那些。在JPA中,您可以通過在Query接口上調用setMaxResults()方法來限制返回的行數。然後可以使用setFirstResult()在運行時遍歷結果集。 EclipseLink中的Postgres方言實現負責儘可能地儘可能有效地與postgres進行通信。

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

+0

這真的是標準的做法嗎?如果我與java.sql.ResultSet比較,我可以定義一個讀取大小,在迭代結果集時會自動考慮它。在使用Spring JPA時,我是否真的需要手動(或多或少)(儘管很簡單)? – Steffen 2011-03-17 00:20:03

0

自動提交設置爲你使用JPA時的默認模式。否則,您無法執行交易。我很確定結果集只在默認情況下才轉發。

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 
} 
相關問題