Mercurial > dive4elements > river
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 : |