Mercurial > dive4elements > river
diff backend/src/main/java/org/dive4elements/river/importer/ImportHYKFormation.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 | 4c3ccf2b0304 |
children |
line wrap: on
line diff
--- a/backend/src/main/java/org/dive4elements/river/importer/ImportHYKFormation.java Fri Apr 06 14:13:14 2018 +0200 +++ b/backend/src/main/java/org/dive4elements/river/importer/ImportHYKFormation.java Sun Apr 08 18:07:06 2018 +0200 @@ -8,16 +8,15 @@ package org.dive4elements.river.importer; -import org.dive4elements.river.model.HYKFormation; -import org.dive4elements.river.model.HYKEntry; - +import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; -import org.hibernate.Session; +import org.dive4elements.river.importer.common.StoreMode; +import org.dive4elements.river.model.HYKEntry; +import org.dive4elements.river.model.HYKFormation; import org.hibernate.Query; - -import java.math.BigDecimal; +import org.hibernate.Session; public class ImportHYKFormation { @@ -31,21 +30,24 @@ protected List<ImportHYKFlowZone> zones; + protected StoreMode storeMode; + protected HYKFormation peer; public ImportHYKFormation() { - zones = new ArrayList<ImportHYKFlowZone>(); + this.zones = new ArrayList<>(); + this.storeMode = StoreMode.NONE; } public ImportHYKFormation( - int formationNum, - ImportHYKEntry entry, - BigDecimal top, - BigDecimal bottom, - BigDecimal distanceVL, - BigDecimal distanceHF, - BigDecimal distanceVR - ) { + final int formationNum, + final ImportHYKEntry entry, + final BigDecimal top, + final BigDecimal bottom, + final BigDecimal distanceVL, + final BigDecimal distanceHF, + final BigDecimal distanceVR + ) { this(); this.formationNum = formationNum; this.entry = entry; @@ -56,103 +58,110 @@ this.distanceVR = distanceVR; } - public void addFlowZone(ImportHYKFlowZone zone) { - zones.add(zone); + public void addFlowZone(final ImportHYKFlowZone zone) { + this.zones.add(zone); zone.setFormation(this); } public int getFormationNum() { - return formationNum; + return this.formationNum; } - public void setFormationNum(int formationNum) { + public void setFormationNum(final int formationNum) { this.formationNum = formationNum; } public ImportHYKEntry getEntry() { - return entry; + return this.entry; } - public void setEntry(ImportHYKEntry entry) { + public void setEntry(final ImportHYKEntry entry) { this.entry = entry; } public BigDecimal getTop() { - return top; + return this.top; } - public void setTop(BigDecimal top) { + public void setTop(final BigDecimal top) { this.top = top; } public BigDecimal getBottom() { - return bottom; + return this.bottom; } - public void setBottom(BigDecimal bottom) { + public void setBottom(final BigDecimal bottom) { this.bottom = bottom; } public BigDecimal getDistanceVL() { - return distanceVL; + return this.distanceVL; } - public void setDistanceVL(BigDecimal distanceVL) { + public void setDistanceVL(final BigDecimal distanceVL) { this.distanceVL = distanceVL; } public BigDecimal getDistanceHF() { - return distanceHF; + return this.distanceHF; } - public void setDistanceHF(BigDecimal distanceHF) { + public void setDistanceHF(final BigDecimal distanceHF) { this.distanceHF = distanceHF; } public BigDecimal getDistanceVR() { - return distanceVR; + return this.distanceVR; } - public void setDistanceVR(BigDecimal distanceVR) { + public void setDistanceVR(final BigDecimal distanceVR) { this.distanceVR = distanceVR; } public void storeDependencies() { getPeer(); - for (ImportHYKFlowZone zone: zones) { + for (final ImportHYKFlowZone zone: this.zones) { zone.storeDependencies(); } } public HYKFormation getPeer() { - if (peer == null) { - HYKEntry e = entry.getPeer(); - Session session = ImporterSession.getInstance() - .getDatabaseSession(); - Query query = session.createQuery( - "from HYKFormation where formationNum=:formationNum " + - "and entry=:entry and top=:top and bottom=:bottom " + - "and distanceVL=:distanceVL and distanceHF=:distanceHF " + - "and distanceVR=:distanceVR"); - query.setParameter("formationNum", formationNum); - query.setParameter("entry", e); - query.setParameter("top", top); - query.setParameter("bottom", bottom); - query.setParameter("distanceVL", distanceVL); - query.setParameter("distanceHF", distanceHF); - query.setParameter("distanceVR", distanceVR); - List<HYKFormation> formations = query.list(); - if (formations.isEmpty()) { - peer = new HYKFormation( - formationNum, e, top, bottom, - distanceVL, distanceHF, distanceVR); - session.save(peer); + if (this.peer == null) { + final HYKEntry e = this.entry.getPeer(); + final Session session = ImporterSession.getInstance() + .getDatabaseSession(); + List<HYKFormation> formations; + if (this.entry.storeMode == StoreMode.INSERT) + formations = null; + else { + final Query query = session.createQuery( + "from HYKFormation where formationNum=:formationNum " + + "and entry=:entry and top=:top and bottom=:bottom " + + "and distanceVL=:distanceVL and distanceHF=:distanceHF " + + "and distanceVR=:distanceVR"); + query.setParameter("formationNum", this.formationNum); + query.setParameter("entry", e); + query.setParameter("top", this.top); + query.setParameter("bottom", this.bottom); + query.setParameter("distanceVL", this.distanceVL); + query.setParameter("distanceHF", this.distanceHF); + query.setParameter("distanceVR", this.distanceVR); + formations = query.list(); + } + if ((formations == null) || formations.isEmpty()) { + this.peer = new HYKFormation( + this.formationNum, e, this.top, this.bottom, + this.distanceVL, this.distanceHF, this.distanceVR); + session.save(this.peer); + this.storeMode = StoreMode.INSERT; } else { - peer = formations.get(0); + this.peer = formations.get(0); + this.storeMode = StoreMode.UPDATE; } } - return peer; + return this.peer; } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :