1 package net
.aramzamzam
.commons
.hibernate
.dao
;
3 import java
.io
.Serializable
;
4 import java
.lang
.reflect
.ParameterizedType
;
7 import org
.apache
.tapestry5
.hibernate
.HibernateSessionManager
;
8 import org
.hibernate
.Criteria
;
9 import org
.hibernate
.Session
;
10 import org
.hibernate
.criterion
.Criterion
;
11 import org
.hibernate
.criterion
.Example
;
13 /** DAO pattern from "Generic Data Access Objects": http://www.hibernate.org/328.html*/
14 public class GenericHibernateDAO
<T
, ID
extends Serializable
>
15 implements GenericDAO
<T
, ID
> {
17 private Class
<T
> persistentClass
;
18 private final HibernateSessionManager sessionManager
;
20 @SuppressWarnings("unchecked")
21 public GenericHibernateDAO(HibernateSessionManager sessionManager
){
22 this.persistentClass
= (Class
<T
>) ((ParameterizedType
) getClass()
23 .getGenericSuperclass()).getActualTypeArguments()[0];
24 this.sessionManager
= sessionManager
;
27 protected Session
getSession() {
28 return sessionManager
.getSession();
31 public Class
<T
> getPersistentClass() {
32 return persistentClass
;
35 public List
<T
> findAll() {
36 return findByCriteria();
39 @SuppressWarnings("unchecked")
40 public <X
extends T
> List
<X
> findByExample(X exampleInstance
, String
... excludeProperty
) {
41 Criteria crit
= getSession().createCriteria(exampleInstance
.getClass());
42 Example example
= Example
.create(exampleInstance
);
43 for (String exclude
: excludeProperty
) {
44 example
.excludeProperty(exclude
);
50 public <X
extends T
> List
<X
> findByExample(X exampleInstance
) {
51 return findByExample(exampleInstance
,new String
[0]);
54 public T
makePersistent(T entity
) {
55 getSession().saveOrUpdate(entity
);
59 public void makeTransient(T entity
) {
60 getSession().delete(entity
);
72 * Use this inside subclasses as a convenience method.
74 @SuppressWarnings("unchecked")
75 protected List
<T
> findByCriteria(Criterion
... criterion
) {
76 Criteria crit
= getSession().createCriteria(getPersistentClass());
77 for (Criterion c
: criterion
) {
84 * Возвращает null, если entity не была найдена
88 @SuppressWarnings("unchecked")
89 public T
findById(ID id
) {
90 return (T
) getSession().get(getPersistentClass(), id
);