public abstract class AbstractHibernateDAOImpl<T extends Serializable, KeyType extends Serializable> extends HibernateDaoSupport {
protected Class<T> domainClass = getDomainClass();
/**
* Method to return the class of the domain object
*/
protected abstract Class<T> getDomainClass();
@SuppressWarnings("unchecked")
public T load(KeyType id) {
return (T) getHibernateTemplate().load(domainClass, id);
}
public void update(T t) {
getHibernateTemplate().update(t);
}
public void save(T t) {
getHibernateTemplate().save(t);
}
public void delete(T t) {
getHibernateTemplate().delete(t);
}
@SuppressWarnings("unchecked")
public List<T> getList() {
return (getHibernateTemplate().find("from " + domainClass.getName() + " x"));
}
public void deleteById(KeyType id) {
Object obj = load(id);
getHibernateTemplate().delete(obj);
}
public void deleteAll() {
getHibernateTemplate().execute(new HibernateCallback() {
public Object doInHibernate(Session session) throws HibernateException {
String hqlDelete = "delete " + domainClass.getName();
int deletedEntities = session.createQuery(hqlDelete).executeUpdate();
return null;
}
});
}
public int count() {
List list = getHibernateTemplate().find("select count(*) from " + domainClass.getName() + " x");
Integer count = (Integer) list.get(0);
return count.intValue();
}
@SuppressWarnings("unchecked")
public List<T> findByExample(T exampleInstance, String[] excludeProperty) {
Criteria crit = getSession().createCriteria(getPersistentClass());
Example example = Example.create(exampleInstance);
for (String exclude : excludeProperty) {
example.excludeProperty(exclude);
}
crit.add(example);
return crit.list();
}
@SuppressWarnings("unchecked")
protected List<T> findByCriteria(Criterion... criterion) {
Criteria crit = getSession().createCriteria(getPersistentClass());
for (Criterion c : criterion) {
crit.add(c);
}
return crit.list();
}
}