BaseHibernateDAOImpl.java
package org.itracker.persistence.dao;
import org.hibernate.HibernateException;
import org.itracker.model.Entity;
import org.springframework.dao.InvalidDataAccessResourceUsageException;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import java.util.Date;
/**
* Contains common behaviour to all hibernate factories
*
* @author rui silva
*/
public abstract class BaseHibernateDAOImpl<T extends Entity> extends HibernateDaoSupport
implements BaseDAO<T> {
/**
*
*/
public BaseHibernateDAOImpl() {
super();
}
/**
* insert a new entity.
* create- and lastmodified-date is set with current time.
*
* @param entity - detached entity object
*/
public void save(T entity) {
if (null == entity) {
throw new InvalidDataAccessResourceUsageException("entity must not be null");
}
try {
Date createDate = new Date();
entity.setCreateDate(createDate);
entity.setLastModifiedDate(createDate);
getSession().save(entity);
} catch (HibernateException ex) {
logger.debug("save: caught HibernateException, call to convertHibernateException", ex);
throw convertHibernateAccessException(ex);
}
}
/**
* inserts a new detached entity or updates if it already exists.
* create- and update-date are set automatically.
*
* @param entity - entity object to be inserted or updated
*/
public void saveOrUpdate(T entity) {
if (null == entity) {
throw new InvalidDataAccessResourceUsageException("entity must not be null");
}
try {
if (null == entity.getCreateDate()) {
entity.setCreateDate(new Date());
entity.setLastModifiedDate(entity.getCreateDate());
} else {
entity.setLastModifiedDate(new Date());
}
getSession().saveOrUpdate(entity);
} catch (HibernateException ex) {
logger.debug("saveOrUpdate: caught HibernateException, call to convertHibernateException", ex);
throw convertHibernateAccessException(ex);
}
}
public void delete(T entity) {
if (null == entity) {
throw new InvalidDataAccessResourceUsageException("entity must not be null");
}
try {
getSession().delete(entity);
getSession().flush();
} catch (HibernateException ex) {
logger.debug("delete: caught HibernateException, call to convertHibernateException", ex);
throw convertHibernateAccessException(ex);
}
}
public void detach(T entity) {
if (null == entity) {
throw new InvalidDataAccessResourceUsageException("entity must not be null");
}
try {
getSession().evict(entity);
} catch (HibernateException ex) {
logger.debug("detach: caught HibernateException, call to convertHibernateException", ex);
throw convertHibernateAccessException(ex);
}
}
public void refresh(T entity) {
if (null == entity) {
throw new InvalidDataAccessResourceUsageException("entity must not be null");
}
try {
getSession().refresh(entity);
} catch (HibernateException ex) {
logger.debug("refresh: caught HibernateException, call to convertHibernateException", ex);
throw convertHibernateAccessException(ex);
}
}
@SuppressWarnings("unchecked")
public T merge(T entity) {
if (null == entity) {
throw new InvalidDataAccessResourceUsageException("entity must not be null");
}
try {
return (T) getSession().merge(entity);
} catch (HibernateException ex) {
logger.debug("merge: caught HibernateException, call to convertHibernateException", ex);
throw convertHibernateAccessException(ex);
}
}
}