package com.dgrid.dao.hibernate;
import java.io.Serializable;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Projections;
import org.springframework.orm.ObjectRetrievalFailureException;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import com.dgrid.dao.GenericDAO;
public class GenericHibernateDAO extends HibernateDaoSupport implements
GenericDAO {
private Log log = LogFactory.getLog(getClass());
public Object create(Object object) {
log.trace("create()");
Session session = super.getSession();
session.save(object);
return (object);
}
public Object read(Class cls, Serializable id)
throws ObjectRetrievalFailureException {
log.trace("read()");
Session session = super.getSession();
Object object = session.get(cls, id);
if (object == null) {
throw (new ObjectRetrievalFailureException(cls, id));
} else {
return (object);
}
}
public Object update(Object object) {
log.trace("update()");
Session session = super.getSession();
session.update(object);
return (object);
}
public Object delete(Class cls, Serializable id)
throws ObjectRetrievalFailureException {
log.trace("delete()");
Session session = super.getSession();
Object object = session.get(cls, id);
if (object == null) {
throw (new ObjectRetrievalFailureException(cls, id));
} else {
session.delete(object);
return (object);
}
}
public int count(Class cls) {
log.trace("count()");
Session session = super.getSession();
Criteria crit = session.createCriteria(cls);
crit.setProjection(Projections.rowCount());
int rows = ((Integer) crit.uniqueResult()).intValue();
return rows;
}
public List list(Class cls, int offset, int max, String orderProperty,
boolean asc) {
log.trace("list()");
Session session = super.getSession();
Criteria crit = session.createCriteria(cls);
if (offset > 0)
crit.setFirstResult(offset);
if (max > 0)
crit.setMaxResults(max);
if (orderProperty != null) {
if (asc)
crit.addOrder(Order.asc(orderProperty));
else
crit.addOrder(Order.desc(orderProperty));
}
List results = crit.list();
return (results);
}
}