1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.kuali.student.r1.common.dao.impl;
17
18 import java.util.List;
19
20 import javax.persistence.EntityManager;
21 import javax.persistence.Query;
22
23 import org.kuali.student.r1.common.dao.CrudDao;
24 import org.kuali.student.r2.common.exceptions.DoesNotExistException;
25
26 public abstract class AbstractCrudDaoImpl implements CrudDao {
27
28 protected EntityManager em;
29
30 public EntityManager getEm() {
31 return em;
32 }
33
34 public void setEm(EntityManager em) {
35 this.em = em;
36 }
37
38
39 @Override
40 public <T> T fetch(Class<T> clazz, String key) throws DoesNotExistException {
41 T entity = em.find(clazz, key);
42 if (entity == null) {
43 throw new DoesNotExistException("No entity for key '" + key + "' found for " + clazz);
44 }
45 return entity;
46 }
47
48 @SuppressWarnings("unchecked")
49 @Override
50 public <T> List<T> find(Class<T> clazz){
51
52 String className = clazz.getSimpleName();
53
54 Query q = em.createQuery("SELECT x FROM "+className+" x");
55 return (List<T>) q.getResultList();
56 }
57
58 @Override
59 public <T> T create(T entity) {
60 em.persist(entity);
61 return entity;
62 }
63
64 @Override
65 public <T> void delete(Class<T> clazz, String key) throws DoesNotExistException {
66 T entity = em.find(clazz, key);
67 if (entity == null) {
68 throw new DoesNotExistException("No such key '" + key + "' for " + clazz);
69 }
70 em.remove(entity);
71 }
72
73 @Override
74 public void delete(Object entity) {
75 em.remove(entity);
76 }
77
78 @Override
79 public <T> T update(T entity) {
80 T updated = em.merge(entity);
81
82 em.flush();
83 return updated;
84 }
85 }