Mercurial > dive4elements > river
comparison flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/AnnotationsFactory.java @ 1924:57b03b3ab15c
Optimize query to fix annotations fetching on oracle, by Sascha Teichmann.
flys-artifacts/trunk@3300 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Felix Wolfsteller <felix.wolfsteller@intevation.de> |
---|---|
date | Tue, 22 Nov 2011 13:39:23 +0000 |
parents | bcef54a563ea |
children | 01f2473e362d |
comparison
equal
deleted
inserted
replaced
1923:e0c39146d469 | 1924:57b03b3ab15c |
---|---|
2 | 2 |
3 import java.math.BigDecimal; | 3 import java.math.BigDecimal; |
4 | 4 |
5 import java.util.List; | 5 import java.util.List; |
6 import java.util.Iterator; | 6 import java.util.Iterator; |
7 import java.util.Collections; | |
7 | 8 |
8 import de.intevation.flys.backend.SessionHolder; | 9 import de.intevation.flys.backend.SessionHolder; |
9 import de.intevation.flys.model.Annotation; | 10 import de.intevation.flys.model.Annotation; |
10 import de.intevation.flys.model.Range; | 11 import de.intevation.flys.model.Range; |
11 import de.intevation.flys.model.River; | 12 import de.intevation.flys.model.River; |
15 | 16 |
16 /** | 17 /** |
17 * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a> | 18 * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a> |
18 */ | 19 */ |
19 public class AnnotationsFactory { | 20 public class AnnotationsFactory { |
20 | |
21 public static List<Annotation> getAnnotations(River river) { | |
22 return getAnnotations(river.getName()); | |
23 } | |
24 | |
25 | 21 |
26 /** | 22 /** |
27 * Get Annotations which do not have a "b" ("to")-value set. | 23 * Get Annotations which do not have a "b" ("to")-value set. |
28 * | 24 * |
29 * @param river name of the river of interest. | 25 * @param river name of the river of interest. |
44 query.setParameterList("ranges", ranges); | 40 query.setParameterList("ranges", ranges); |
45 return query.list(); | 41 return query.list(); |
46 } | 42 } |
47 | 43 |
48 | 44 |
49 public static List<Annotation> getAnnotations(String river) { | 45 public static List<Annotation> getAnnotations(River river) { |
50 Session session = SessionHolder.HOLDER.get(); | 46 Session session = SessionHolder.HOLDER.get(); |
51 | 47 |
52 Query rangesQuery = session.createQuery( | |
53 "from Range where river.name=:name"); | |
54 rangesQuery.setParameter("name", river); | |
55 List<Range> ranges = rangesQuery.list(); | |
56 | |
57 Query query = session.createQuery( | 48 Query query = session.createQuery( |
58 "from Annotation where range in (:ranges) order by range.a"); | 49 "from Annotation as an where an.range.river = :river" + |
59 query.setParameterList("ranges", ranges); | 50 " order by an.range.a"); |
51 query.setParameter("river", river); | |
60 return query.list(); | 52 return query.list(); |
61 } | 53 } |
62 | |
63 | 54 |
64 /** | 55 /** |
65 * Get minimal "a" ("from") and maximal "b" ("to") value of annotations' | 56 * Get minimal "a" ("from") and maximal "b" ("to") value of annotations' |
66 * ranges of a river. | 57 * ranges of a river. |
67 * | 58 * |
83 minAmaxB[1] = ((BigDecimal) row[1]).doubleValue(); | 74 minAmaxB[1] = ((BigDecimal) row[1]).doubleValue(); |
84 return minAmaxB; | 75 return minAmaxB; |
85 } | 76 } |
86 | 77 |
87 | 78 |
88 public static Iterator<Annotation> getAnnotationsIterator(String river) { | 79 public static Iterator<Annotation> getAnnotationsIterator( |
80 String riverName | |
81 ) { | |
89 Session session = SessionHolder.HOLDER.get(); | 82 Session session = SessionHolder.HOLDER.get(); |
90 | 83 |
91 Query rangesQuery = session.createQuery( | 84 Query riverQuery = session.createQuery( |
92 "from Range where river.name=:name"); | 85 "from River where name = :name"); |
93 rangesQuery.setParameter("name", river); | 86 riverQuery.setParameter("name", riverName); |
94 List<Range> ranges = rangesQuery.list(); | 87 List<River> rivers = riverQuery.list(); |
88 if (rivers.isEmpty()) { | |
89 List<Annotation> list = Collections.emptyList(); | |
90 return list.iterator(); | |
91 } | |
95 | 92 |
96 Query query = session.createQuery( | 93 Query query = session.createQuery( |
97 "from Annotation where range in (:ranges) order by range.a"); | 94 "from Annotation as an" + |
98 query.setParameterList("ranges", ranges); | 95 " where an.range.river = :river order by an.range.a"); |
96 query.setParameter("river", rivers.get(0)); | |
97 | |
99 return (Iterator<Annotation>)query.iterate(); | 98 return (Iterator<Annotation>)query.iterate(); |
100 } | 99 } |
101 } | 100 } |
102 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 : | 101 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 : |