001: package auction.dao.hibernate;
002:
003: import auction.dao.*;
004: import auction.persistence.HibernateUtil;
005: import org.hibernate.*;
006: import org.hibernate.criterion.*;
007:
008: import java.util.*;
009: import java.io.Serializable;
010: import java.lang.reflect.ParameterizedType;
011:
012: public abstract class GenericHibernateDAO<T, ID extends Serializable>
013: implements GenericDAO<T, ID> {
014:
015: private Class<T> persistentClass;
016: private Session session;
017:
018: public GenericHibernateDAO() {
019: this .persistentClass = (Class<T>) ((ParameterizedType) getClass()
020: .getGenericSuperclass()).getActualTypeArguments()[0];
021: }
022:
023: public void setSession(Session s) {
024: this .session = s;
025: }
026:
027: protected Session getSession() {
028: return HibernateUtil.getSessionFactory().getCurrentSession();
029: }
030:
031: public Class<T> getPersistentClass() {
032: return persistentClass;
033: }
034:
035: @SuppressWarnings("unchecked")
036: public T findById(ID id, boolean lock) {
037: T entity;
038: if (lock)
039: entity = (T) getSession().load(getPersistentClass(), id,
040: LockMode.UPGRADE);
041: else
042: entity = (T) getSession().load(getPersistentClass(), id);
043:
044: return entity;
045: }
046:
047: @SuppressWarnings("unchecked")
048: public List<T> findAll() {
049:
050: return findByCriteria();
051: }
052:
053: @SuppressWarnings("unchecked")
054: public List<T> findByExample(T exampleInstance,
055: String... excludeProperty) {
056: Criteria crit = getSession().createCriteria(
057: getPersistentClass());
058: Example example = Example.create(exampleInstance);
059: for (String exclude : excludeProperty) {
060: example.excludeProperty(exclude);
061: }
062: crit.add(example);
063: return crit.list();
064: }
065:
066: @SuppressWarnings("unchecked")
067: public List<T> findByExample(T exampleInstance,
068: List<String> excludeProperties) {
069: Criteria crit = getSession().createCriteria(
070: getPersistentClass());
071: Example example = Example.create(exampleInstance);
072: for (String exclude : excludeProperties)
073: example.excludeProperty(exclude);
074: crit.add(example);
075: return crit.list();
076: }
077:
078: @SuppressWarnings("unchecked")
079: public T makePersistent(T entity) {
080: getSession().saveOrUpdate(entity);
081: return entity;
082: }
083:
084: public void makeTransient(T entity) {
085: getSession().delete(entity);
086: }
087:
088: public void flush() {
089: getSession().flush();
090: }
091:
092: public void clear() {
093: getSession().clear();
094: }
095:
096: @SuppressWarnings("unchecked")
097: protected List<T> findByCriteria(Criterion... criterion) {
098: Criteria crit = getSession().createCriteria(
099: getPersistentClass());
100: for (Criterion c : criterion) {
101: crit.add(c);
102: }
103: return crit.list();
104: }
105:
106: }
|