[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