bonjour,
je dosi extraire de la base des centaines de milliers de lignes pour les mettres dans un outputstream.
Si j'utilise JPA dans un contexte "normal", je vais charger tout les objects puis faire une boucle sur ces objects et ecrite chaque object dans le outputstream.
Le risque est d'avoir un overflowMemory exception.
Donc l'idée est d'utiliser un curseur, mais jpa et curseur ne font pas bon menage a priori.
Utilisant eclipseLink , voici le code qui devrait permettre de le faire mais une belle exception se lève sans aucune explication. (sur la ligne 'Cursor cursor = q.getResultCursor();
(J'utilise le JpaManager de eclipseLink)
et l'exception est :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 JpaQuery q = (JpaQuery) em.createNativeQuery("select * from t_fat_transaction " + where, Transaction.class); setDate(q, qtf); q.setMaxResults(CommonConstant.MAX_TRANSACTION_TRUNCATED); q.setFirstResult(0); Cursor cursor = q.getResultCursor(); while (cursor.hasMoreElements()) { Transaction t = (Transaction) cursor.nextElement(); os.write(t.getMtKey().getBytes()); }
The container class specified [class java.util.Vector] cannot be used because the container needs to implement class org.eclipse.persistence.queries.Cursor.
une idée ?
y'a til une autre méthode pour utiliser les curseur ou pour éviter de tout charger d'un coup ?
Merci
Partager