package com.vst.dao.hibernate;
import java.io.Serializable;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.vst.dao.Dao;
import org.springframework.orm.ObjectRetrievalFailureException;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
/**
* This class serves as the Base class for all other Daos - namely to hold
* common methods that they might all use. Can be used for standard CRUD
* operations.</p>
*
* <p><a href="BaseDaoHibernate.java.html"><i>View Source</i></a></p>
*
* @author <a href="mailto:matt@raibledesigns.com">Matt Raible</a>
*/
public abstract class BaseDaoHibernate<T> extends HibernateDaoSupport implements
Dao<T> {
protected final Log log = LogFactory.getLog(getClass());
abstract Class<T> getServiceClass();
/**
* @see com.vst.dao.Dao#saveObject(java.lang.Object)
*/
// @Override
protected void doSaveObject(Object o) {
getHibernateTemplate().saveOrUpdate(o);
}
/**
* @see com.vst.dao.Dao#getObject(java.lang.Class, java.io.Serializable)
*/
// @Override
protected Object doGetObject(Serializable id) {
Object o = getHibernateTemplate().get(getServiceClass(), id);
if (o == null) {
throw new ObjectRetrievalFailureException(getServiceClass(), id);
}
return o;
}
/**
* @see com.vst.dao.Dao#getObjects(java.lang.Class)
*/
// @Override
protected List<?> doGetObjects() {
return getHibernateTemplate().loadAll(getServiceClass());
}
/**
* @see com.vst.dao.Dao#removeObject(java.lang.Class, java.io.Serializable)
*/
// @Override
protected void doRemoveObject(Serializable id) {
getHibernateTemplate().delete(doGetObject(id));
// getHibernateTemplate().flush();
}
// @Override
protected void doRemoveEntity(Object o) {
getHibernateTemplate().delete(o);
// getHibernateTemplate().flush();
}
// @Override
protected void doEvict(Object o) {
getHibernateTemplate().evict(o);
}
// @Override
public void evict(T o) {
doEvict(o);
}
// @Override
public void removeEntity(T o) {
doRemoveEntity(o);
}
// @Override
public void removeObject(Integer o) {
doRemoveObject(o);
}
@SuppressWarnings("unchecked")
// @Override
public List<T> getObjects(){
return (List<T>) doGetObjects();
}
// @Override
public void saveObject(T o) {
doSaveObject(o);
};
@SuppressWarnings("unchecked")
// @Override
public T getObject(Integer id) {
return (T) doGetObject(id);
}
}