Commit edc957518703dc473423f1b30bf6bf2015b00ecb
1 parent
aad7d7b1
Add DAO layer including implementation for user entity
Showing
8 changed files
with
148 additions
and
54 deletions
services/Common/src/main/java/de/bht/beuthbot/dataAccess/GenericDAO.java
0 → 100644
1 | +package de.bht.beuthbot.dataAccess; | |
2 | + | |
3 | +import de.bht.beuthbot.model.entities.Entity; | |
4 | + | |
5 | +import java.io.Serializable; | |
6 | +import java.util.List; | |
7 | + | |
8 | +/** | |
9 | + * Created by Benjamin Rühl on 19.12.2017. | |
10 | + */ | |
11 | +public interface GenericDAO<T extends Entity, ID extends Serializable> { | |
12 | + | |
13 | + T findById(ID id); | |
14 | + | |
15 | + List<T> findAll(); | |
16 | + | |
17 | + T saveOrUpdate(T entity); | |
18 | + | |
19 | + void delete(T entity); | |
20 | +} | ... | ... |
services/Common/src/main/java/de/bht/beuthbot/dataAccess/UserDAO.java
0 → 100644
services/Global/src/main/java/de/bht/beuthbot/daos/AppUserDAO.java
0 → 100644
1 | +package de.bht.beuthbot.daos; | |
2 | + | |
3 | +import de.bht.beuthbot.dataAccess.UserDAO; | |
4 | +import de.bht.beuthbot.entities.AppUser; | |
5 | +import de.bht.beuthbot.model.entities.User; | |
6 | + | |
7 | +import javax.ejb.Stateless; | |
8 | + | |
9 | +/** | |
10 | + * Created by Benjamin Rühl on 19.12.2017. | |
11 | + */ | |
12 | +@Stateless | |
13 | +public class AppUserDAO extends GenericHibernateDAO<User, Long> implements UserDAO { | |
14 | + | |
15 | + public AppUserDAO() { | |
16 | + setEntityClass(AppUser.class); | |
17 | + } | |
18 | +} | ... | ... |
services/Global/src/main/java/de/bht/beuthbot/daos/GenericHibernateDAO.java
0 → 100644
1 | +package de.bht.beuthbot.daos; | |
2 | + | |
3 | +import de.bht.beuthbot.dataAccess.GenericDAO; | |
4 | +import de.bht.beuthbot.model.entities.Entity; | |
5 | +import org.hibernate.Criteria; | |
6 | +import org.hibernate.Session; | |
7 | +import org.hibernate.criterion.Criterion; | |
8 | + | |
9 | +import javax.persistence.EntityManager; | |
10 | +import javax.persistence.PersistenceContext; | |
11 | +import java.io.Serializable; | |
12 | +import java.lang.reflect.ParameterizedType; | |
13 | +import java.util.List; | |
14 | + | |
15 | +/** | |
16 | + * Created by Benjamin Rühl on 19.12.2017. | |
17 | + */ | |
18 | +public class GenericHibernateDAO<T extends Entity, ID extends Serializable> implements GenericDAO<T, ID> { | |
19 | + | |
20 | + private Class<? extends T> entityClass; | |
21 | + private Session session; | |
22 | + | |
23 | + @PersistenceContext | |
24 | + private EntityManager em; | |
25 | + | |
26 | + @SuppressWarnings("unchecked cast") | |
27 | + public GenericHibernateDAO() { | |
28 | + entityClass = (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0]; | |
29 | + setSession( (Session)em.getDelegate() ); | |
30 | + } | |
31 | + | |
32 | + public void setSession(Session s) { | |
33 | + this.session = s; | |
34 | + } | |
35 | + | |
36 | + protected Session getSession() { | |
37 | + if (session == null) | |
38 | + throw new IllegalStateException("Session has not been set on DAO before usage"); | |
39 | + return session; | |
40 | + } | |
41 | + | |
42 | + /** | |
43 | + * Use this in subclasses to set entityClass to derived type of T | |
44 | + */ | |
45 | + protected void setEntityClass(Class<? extends T> entityClass) { | |
46 | + this.entityClass = entityClass; | |
47 | + } | |
48 | + | |
49 | + public Class<? extends T> getEntityClass() { | |
50 | + return entityClass; | |
51 | + } | |
52 | + | |
53 | + @Override | |
54 | + public T findById(ID id) { | |
55 | + return getSession().load(getEntityClass(), id); | |
56 | + } | |
57 | + | |
58 | + public List<T> findAll() { | |
59 | + return findByCriteria(); | |
60 | + } | |
61 | + | |
62 | + @Override | |
63 | + public T saveOrUpdate(T entity) { | |
64 | + getSession().saveOrUpdate(entity); | |
65 | + return entity; | |
66 | + } | |
67 | + | |
68 | + @Override | |
69 | + public void delete(T entity) { | |
70 | + getSession().delete(entity); | |
71 | + } | |
72 | + | |
73 | + public void flush() { | |
74 | + getSession().flush(); | |
75 | + } | |
76 | + | |
77 | + public void clear() { | |
78 | + getSession().clear(); | |
79 | + } | |
80 | + | |
81 | + /** | |
82 | + * Use this inside subclasses as a convenience method. | |
83 | + */ | |
84 | + @SuppressWarnings("unchecked") | |
85 | + protected List<T> findByCriteria(Criterion... criterion) { | |
86 | + Criteria crit = getSession().createCriteria(getEntityClass()); | |
87 | + for (Criterion c : criterion) { | |
88 | + crit.add(c); | |
89 | + } | |
90 | + return crit.list(); | |
91 | + } | |
92 | +} | ... | ... |
services/Global/src/main/java/de/bht/beuthbot/entities/User.java renamed to services/Global/src/main/java/de/bht/beuthbot/entities/AppUser.java
... | ... | @@ -5,10 +5,12 @@ import javax.persistence.Table; |
5 | 5 | |
6 | 6 | /** |
7 | 7 | * Created by Benjamin Rühl on 19.11.2017. |
8 | + * Note: This class must not be named "User" except a different table name is provided. | |
9 | + * Postgres does not support creating a table named "user". | |
8 | 10 | */ |
9 | 11 | @Entity |
10 | -@Table(name = "user_entity") | |
11 | -public class User extends EntityBase implements de.bht.beuthbot.model.entities.User { | |
12 | +@Table | |
13 | +public class AppUser extends EntityBase implements de.bht.beuthbot.model.entities.User { | |
12 | 14 | |
13 | 15 | private String facebookUserId; |
14 | 16 | private String telegramUserId; | ... | ... |
services/Global/src/main/java/de/bht/beuthbot/persistence/UserManager.java deleted
100644 → 0
1 | -package de.bht.beuthbot.persistence; | |
2 | - | |
3 | -import de.bht.beuthbot.entities.User; | |
4 | - | |
5 | -import javax.ejb.Stateless; | |
6 | -import javax.persistence.EntityManager; | |
7 | -import javax.persistence.PersistenceContext; | |
8 | - | |
9 | -//@Stateless | |
10 | -public class UserManager { | |
11 | - | |
12 | - /*@PersistenceContext(unitName="PostgreSQLDS") | |
13 | - protected EntityManager entityManager; | |
14 | - | |
15 | - public void createUser() { | |
16 | - User user = new User(); | |
17 | - user.setFacebookUserId("FacebookUserId"); | |
18 | - user.setTelegramUserId("TelegramUserId"); | |
19 | - | |
20 | - entityManager.persist(user); | |
21 | - }*/ | |
22 | -} |
services/Global/src/main/resources/META-INF/persistence.xml
... | ... | @@ -4,18 +4,17 @@ |
4 | 4 | http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd" |
5 | 5 | version="2.1"> |
6 | 6 | |
7 | - <persistence-unit name="PostgreSQLDS" transaction-type="RESOURCE_LOCAL"> | |
7 | + <persistence-unit name="PostgreSQLDS" transaction-type="JTA"> | |
8 | 8 | |
9 | 9 | <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider> |
10 | 10 | |
11 | 11 | <jta-data-source>java:jboss/datasources/PostgreSQLDS</jta-data-source> |
12 | 12 | |
13 | - <class>de.bht.beuthbot.entities.User</class> | |
14 | - | |
15 | 13 | <properties> |
16 | 14 | |
17 | 15 | <!--<property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/>--> <!-- DB Dialect --> |
18 | 16 | <property name="hibernate.dialect" value="de.bht.beuthbot.persistence.ExtendedPostgreSQLDialect"/> |
17 | + <!--<property name="hibernate.ejb.naming_strategy" value="org.hibernate.cfg.ImprovedNamingStrategy"/>--> | |
19 | 18 | <property name="hibernate.hbm2ddl.auto" value="create-drop" /> <!-- create / create-drop / update / none --> |
20 | 19 | <property name="hibernate.archive.autodetection" value="class"/> |
21 | 20 | ... | ... |
services/Global/src/main/webapp/META-INF/persistence.xml deleted
100644 → 0
1 | -<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence" | |
2 | - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | |
3 | - xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence | |
4 | - http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd" | |
5 | - version="2.1"> | |
6 | - | |
7 | - <persistence-unit name="de.bht.beuthbot.jpa" transaction-type="RESOURCE_LOCAL"> | |
8 | - | |
9 | - <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider> | |
10 | - | |
11 | - <properties> | |
12 | - <property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver" /> <!-- DB Driver --> | |
13 | - <property name="javax.persistence.jdbc.url" value="jdbc:postgresql://localhost:5432/beuthbot" /> <!-- BD Name --> | |
14 | - <property name="javax.persistence.jdbc.user" value="beuthbot_app" /> <!-- DB User --> | |
15 | - <property name="javax.persistence.jdbc.password" value="VhS7WPVpdYEHYLpf" /> <!-- DB Password --> | |
16 | - | |
17 | - <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQL95Dialect"/> <!-- DB Dialect --> | |
18 | - <property name="hibernate.hbm2ddl.auto" value="create-drop" /> <!-- create / create-drop / update / none --> | |
19 | - <property name="hibernate.archive.autodetection" value="class"/> | |
20 | - | |
21 | - <property name="hibernate.show_sql" value="true" /> <!-- Show SQL in console --> | |
22 | - <property name="hibernate.format_sql" value="true" /> <!-- Show SQL formatted --> | |
23 | - </properties> | |
24 | - | |
25 | - </persistence-unit> | |
26 | - | |
27 | -</persistence> | |
28 | 0 | \ No newline at end of file |