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,10 +5,12 @@ import javax.persistence.Table; | ||
5 | 5 | ||
6 | /** | 6 | /** |
7 | * Created by Benjamin Rühl on 19.11.2017. | 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 | @Entity | 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 | private String facebookUserId; | 15 | private String facebookUserId; |
14 | private String telegramUserId; | 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,18 +4,17 @@ | ||
4 | http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd" | 4 | http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd" |
5 | version="2.1"> | 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 | <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider> | 9 | <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider> |
10 | 10 | ||
11 | <jta-data-source>java:jboss/datasources/PostgreSQLDS</jta-data-source> | 11 | <jta-data-source>java:jboss/datasources/PostgreSQLDS</jta-data-source> |
12 | 12 | ||
13 | - <class>de.bht.beuthbot.entities.User</class> | ||
14 | - | ||
15 | <properties> | 13 | <properties> |
16 | 14 | ||
17 | <!--<property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/>--> <!-- DB Dialect --> | 15 | <!--<property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/>--> <!-- DB Dialect --> |
18 | <property name="hibernate.dialect" value="de.bht.beuthbot.persistence.ExtendedPostgreSQLDialect"/> | 16 | <property name="hibernate.dialect" value="de.bht.beuthbot.persistence.ExtendedPostgreSQLDialect"/> |
17 | + <!--<property name="hibernate.ejb.naming_strategy" value="org.hibernate.cfg.ImprovedNamingStrategy"/>--> | ||
19 | <property name="hibernate.hbm2ddl.auto" value="create-drop" /> <!-- create / create-drop / update / none --> | 18 | <property name="hibernate.hbm2ddl.auto" value="create-drop" /> <!-- create / create-drop / update / none --> |
20 | <property name="hibernate.archive.autodetection" value="class"/> | 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 | \ No newline at end of file | 0 | \ No newline at end of file |