annotate src/main/java/de/intevation/lada/data/Repository.java @ 43:13178bbe77ff

New generic repository for data requests.
author Raimund Renkert <rrenkert@intevation.de>
date Fri, 24 May 2013 11:51:01 +0200
parents
children 74a488e52dde
rev   line source
43
13178bbe77ff New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
1 package de.intevation.lada.data;
13178bbe77ff New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
2
13178bbe77ff New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
3 import java.util.List;
13178bbe77ff New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
4
13178bbe77ff New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
5 import javax.enterprise.context.ApplicationScoped;
13178bbe77ff New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
6 import javax.inject.Inject;
13178bbe77ff New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
7 import javax.persistence.EntityManager;
13178bbe77ff New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
8 import javax.persistence.criteria.CriteriaBuilder;
13178bbe77ff New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
9 import javax.persistence.criteria.CriteriaQuery;
13178bbe77ff New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
10 import javax.persistence.criteria.Root;
13178bbe77ff New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
11 import javax.inject.Named;
13178bbe77ff New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
12
13178bbe77ff New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
13 /**
13178bbe77ff New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
14 * This generic Container is an interface to request and select Data
13178bbe77ff New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
15 * obejcts from the connected database.
13178bbe77ff New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
16 *
13178bbe77ff New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
17 * @author <a href="mailto:rrenkert@intevation.de">Raimund Renkert</a>
13178bbe77ff New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
18 */
13178bbe77ff New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
19 @Named
13178bbe77ff New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
20 @ApplicationScoped
13178bbe77ff New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
21 public class Repository
13178bbe77ff New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
22 {
13178bbe77ff New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
23 /**
13178bbe77ff New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
24 * The entitymanager managing the data.
13178bbe77ff New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
25 */
13178bbe77ff New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
26 @Inject
13178bbe77ff New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
27 private EntityManager em;
13178bbe77ff New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
28
13178bbe77ff New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
29 /**
13178bbe77ff New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
30 * Get all objects of type <link>clazz</link>from database.
13178bbe77ff New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
31 *
13178bbe77ff New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
32 * @param clazz The class type.
13178bbe77ff New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
33 * @return List of objects.
13178bbe77ff New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
34 */
13178bbe77ff New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
35 public <T> List<T> findAll(Class<T> clazz) {
13178bbe77ff New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
36 CriteriaBuilder builder = em.getCriteriaBuilder();
13178bbe77ff New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
37 CriteriaQuery<T> criteria = builder.createQuery(clazz);
13178bbe77ff New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
38 Root<T> member = criteria.from(clazz);
13178bbe77ff New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
39 criteria.select(member);
13178bbe77ff New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
40 return em.createQuery(criteria).getResultList();
13178bbe77ff New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
41 }
13178bbe77ff New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
42
13178bbe77ff New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
43 /**
13178bbe77ff New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
44 * Find a single object identified by its id.
13178bbe77ff New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
45 *
13178bbe77ff New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
46 * @param clazz The class type.
13178bbe77ff New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
47 * @param id The object id.
13178bbe77ff New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
48 * @return The requested object of type clazz
13178bbe77ff New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
49 */
13178bbe77ff New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
50 public <T> T findById(Class<T> clazz, String id) {
13178bbe77ff New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
51 return em.find(clazz, id);
13178bbe77ff New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
52 }
13178bbe77ff New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
53 }
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)