related to inheritance
[aramzamzam-commons.git] / aramzamzam-commons / commons-hibernate / src / main / java / net / aramzamzam / commons / hibernate / dao / GenericHibernateDAO.java
blob80e8e854d081ce429e1ff7a69f32ed9f770fe014
1 package net.aramzamzam.commons.hibernate.dao;
3 import java.io.Serializable;
4 import java.lang.reflect.ParameterizedType;
5 import java.util.List;
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);
46 crit.add(example);
47 return crit.list();
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);
56 return entity;
59 public void makeTransient(T entity) {
60 getSession().delete(entity);
63 public void flush() {
64 getSession().flush();
67 public void clear() {
68 getSession().clear();
71 /**
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) {
78 crit.add(c);
80 return crit.list();
83 /**
84 * Возвращает null, если entity не была найдена
85 * @param id
86 * @return
88 @SuppressWarnings("unchecked")
89 public T findById(ID id) {
90 return (T) getSession().get(getPersistentClass(), id);