comparison backend/src/main/java/org/dive4elements/river/importer/ImportSedimentLoadLSValue.java @ 8986:392bbcd8a88b

Database inserts accelerated by suppressing unnecessary database queries for new data series
author mschaefer
date Sun, 08 Apr 2018 18:07:06 +0200
parents 5e38e2924c07
children
comparison
equal deleted inserted replaced
8985:27851cfda84a 8986:392bbcd8a88b
8 8
9 package org.dive4elements.river.importer; 9 package org.dive4elements.river.importer;
10 10
11 import java.util.List; 11 import java.util.List;
12 12
13 import org.hibernate.Session; 13 import org.dive4elements.river.importer.common.StoreMode;
14 import org.hibernate.Query;
15
16 import org.dive4elements.river.model.SedimentLoadLS; 14 import org.dive4elements.river.model.SedimentLoadLS;
17 import org.dive4elements.river.model.SedimentLoadLSValue; 15 import org.dive4elements.river.model.SedimentLoadLSValue;
16 import org.hibernate.Query;
17 import org.hibernate.Session;
18 18
19 19
20 public class ImportSedimentLoadLSValue { 20 public class ImportSedimentLoadLSValue {
21 21
22 private Double station; 22 private final Double station;
23 private Double value; 23 private final Double value;
24 24
25 private SedimentLoadLSValue peer; 25 private SedimentLoadLSValue peer;
26 26
27 27
28 public ImportSedimentLoadLSValue(Double station, Double value) { 28 public ImportSedimentLoadLSValue(final Double station, final Double value) {
29 this.station = station; 29 this.station = station;
30 this.value = value; 30 this.value = value;
31 } 31 }
32 32
33 33
34 public void storeDependencies(SedimentLoadLS sedimentLoadLS) { 34 public void storeDependencies(final SedimentLoadLS sedimentLoadLS, final StoreMode parentStoreMode) {
35 getPeer(sedimentLoadLS); 35 getPeer(sedimentLoadLS, parentStoreMode);
36 } 36 }
37 37
38 38
39 public SedimentLoadLSValue getPeer(SedimentLoadLS sedimentLoadLS) { 39 public SedimentLoadLSValue getPeer(final SedimentLoadLS sedimentLoadLS, final StoreMode parentStoreMode) {
40 if (peer == null) { 40 if (this.peer == null) {
41 Session session = ImporterSession.getInstance() 41 List<SedimentLoadLSValue> values;
42 .getDatabaseSession(); 42 final Session session = ImporterSession.getInstance().getDatabaseSession();
43 Query query = session.createQuery( 43 if (parentStoreMode == StoreMode.INSERT)
44 "from SedimentLoadLSValue where " + 44 values = null;
45 " sedimentLoadLS=:sedimentLoadLS and " + 45 else {
46 " station=:station and " + 46 final Query query = session.createQuery(
47 " value=:value" 47 "from SedimentLoadLSValue where " +
48 ); 48 " sedimentLoadLS=:sedimentLoadLS and " +
49 49 " station=:station and " +
50 query.setParameter("sedimentLoadLS", sedimentLoadLS); 50 " value=:value"
51 query.setParameter("station", station); 51 );
52 query.setParameter("value", value); 52 query.setParameter("sedimentLoadLS", sedimentLoadLS);
53 53 query.setParameter("station", this.station);
54 List<SedimentLoadLSValue> values = query.list(); 54 query.setParameter("value", this.value);
55 if (values.isEmpty()) { 55 values = query.list();
56 peer = new SedimentLoadLSValue(sedimentLoadLS, station, value); 56 }
57 session.save(peer); 57 if ((values == null) || values.isEmpty()) {
58 this.peer = new SedimentLoadLSValue(sedimentLoadLS, this.station, this.value);
59 session.save(this.peer);
58 } 60 }
59 else { 61 else {
60 peer = values.get(0); 62 this.peer = values.get(0);
61 } 63 }
62 } 64 }
63 65
64 return peer; 66 return this.peer;
65 } 67 }
66 } 68 }
67 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : 69 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org