Mercurial > dive4elements > river
diff flys-backend/src/main/java/de/intevation/flys/importer/ImportWstColumnValue.java @ 478:db430bd9e0e0
Implemented a WstColumnValue cache to speed up inserting WST files into database.
flys-backend/trunk@1734 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Ingo Weinzierl <ingo.weinzierl@intevation.de> |
---|---|
date | Wed, 20 Apr 2011 07:21:03 +0000 |
parents | 29a408f80a89 |
children | 67fd63e4ef66 |
line wrap: on
line diff
--- a/flys-backend/src/main/java/de/intevation/flys/importer/ImportWstColumnValue.java Mon Apr 18 17:01:00 2011 +0000 +++ b/flys-backend/src/main/java/de/intevation/flys/importer/ImportWstColumnValue.java Wed Apr 20 07:21:03 2011 +0000 @@ -6,17 +6,23 @@ import java.math.BigDecimal; +import org.apache.log4j.Logger; + import org.hibernate.Session; -import org.hibernate.Query; -import java.util.List; +import java.util.Map; + public class ImportWstColumnValue { + protected Logger logger = Logger.getLogger(ImportWstColumnValue.class); + protected BigDecimal position; protected BigDecimal w; protected ImportWstColumn wstColumn; + protected Map<WstColumnValueKey, WstColumnValue> cache; + protected WstColumnValue peer; public ImportWstColumnValue() { @@ -25,11 +31,13 @@ public ImportWstColumnValue( ImportWstColumn wstColumn, BigDecimal position, - BigDecimal w + BigDecimal w, + Map<WstColumnValueKey, WstColumnValue> cache ) { this.wstColumn = wstColumn; this.position = position; this.w = w; + this.cache = cache; } public BigDecimal getPosition() { @@ -59,22 +67,25 @@ public WstColumnValue getPeer(River river) { if (peer == null) { WstColumn c = wstColumn.getPeer(river); + + // check the cache before we fire a db query + WstColumnValue value = cache.get(new WstColumnValueKey( + c.getId(), + position.doubleValue(), + w.doubleValue())); + + if (value != null) { + peer = value; + return peer; + } + Session session = Importer.sessionHolder.get(); - Query query = session.createQuery( - "from WstColumnValue where " + - "wstColumn=:c and position=:p and w=:w"); - query.setParameter("c", c); - query.setParameter("p", position); - query.setParameter("w", w); - List<WstColumnValue> values = query.list(); - if (values.isEmpty()) { - peer = new WstColumnValue(c, position, w); - session.save(peer); - } - else { - peer = values.get(0); - } + peer = new WstColumnValue(c, position, w); + session.save(peer); + + cache.put(new WstColumnValueKey(peer), peer); } + return peer; } }