[Java lista] Prepared JPA Query

Szomor Attila aszomor at computertechnika.hu
2009. Aug. 4., K, 10:26:20 CEST


Sziasztok,

CSV-bol importálni kellene adott rendszerességgel különböző törzsadat  
frissítéseket:
  1, Kell egy ellenőrzés, hogy már létezik-e, ha igen update
  2, ha nem létezett, egy másik ellenőrzés, hogy az Ő master-e létezik-e,  
ha igen felvesszük
látszőlag roppant egyszerű, két Query és egy em.persist vagy egy em.update.
Az alap kódtörzsben 5000 (WHO) kód van és ehhez egy kapcsolat 282000  
(WHO_Competencia)adatot rendelne,
ez első megközelítésben 12 órát futott ebből a CSV olvasás és parse 1.5mp  
az em.persist kb 20perc, a két select és a log kb. 11 óra 40perc.
A logból az látszik, hogy a (A vagy B)Query.setParameter(1,  
whoxWhoCom.getWhoCwho()); 0.016mp minden alkalommal, most egy első  
feltöltésnél ez
282000 * 2 * 0.016mp = 9024mp az az 150.4perc.

Ez Delphi-vel 4 prepared statement-el (2 select, 1 insert, 1 uopdate) nem  
egész 3 percig tart, gondoltam, hogy egy interpretált nyelv a közelébe sem  
érhet, de hogy ennyire nem az gáz !!!

A JPA Query-kre nem találtam prepare lehetőséget, gondoltam egyet durván  
megkerülöm az em-t aztán gyerünk prepareStatement, az update kersés  
kihagyva, csak az insert-re koncentrálva 15perc, hát ez lehangoló !!!

Hogy importáltok java-ból ???


Attila.

ORIG 12ora
----------
AQuery = em.createNamedQuery(..);
BQuery = em.createNamedQuery(..);
while (!reader.isEof()) {
   parseLine();
   AQuery.setParameter(1, whoxWhoCom.getWhoCwho());
   AQuery.setParameter(2, whoxWhoCom.getWhoSzmk());
   AQuery.getResultList();
   if ... {
     em.merge(entity);
   | else {
     BQuery.setParameter(1, whoxWhoCom.getWhoCwho());
     BQuery.getResultList();
     if ... {
       em.persist(entity);
     }
   }
   reader.ReadNextLine();
}


NEW 15p
-------
conn = ds.getConnection();
stmt = conn.prepareStatement("SELECT e.id,e.szcod FROM beavatk_szekszard e  
WHERE e.szcod = ?");
while (!reader.isEof()) {
   parseLine();
   stmt.setString(1, whoxWhoCom.getWhoCwho());
   rs = stmt.executeQuery();
   if ((rs != null) && rs.next()) {
     BigDecimal id = rs.getBigDecimal(1);
     if (id != null) {
       beavatkSzekszard.setId(id.toBigInteger());
       beavatkSzekszard.setSzcod(rs.getString(2));
     }
   }
   rs.close();
   if ... {
     em.persist(entity);
   }
   reader.ReadNextLine();
}


További információk a(z) Javalist levelezőlistáról