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 :

http://dive4elements.wald.intevation.org