From dcc5c10af19585c6f06f761aeaf01c8e38a791b6 Mon Sep 17 00:00:00 2001 From: Fernando Bellas Permuy Date: Wed, 1 Jul 2009 16:30:15 +0200 Subject: [PATCH] ItEr15S04ArquitecturaServidorItEr14S04: GenericDaoHibernateTemplate removed. GenericDaoHibernateTemplate was an alternative implementation to GenericDaoHibernate. GenericDaoHibernateTemplate forces developer to use the Spring's Hibernate helper API, while GenericDaoHibernate forces developer to the use the Hibernate native API. Since Spring's Hibernate helper API does not provide much value over the Hibernate native API, we have prefered to use GenericDaoHibernate as default base class for DAOs. --- .../impl/GenericDaoHibernateTemplate.java | 161 ------------------ 1 file changed, 161 deletions(-) delete mode 100644 navalplanner-business/src/main/java/org/navalplanner/business/common/daos/impl/GenericDaoHibernateTemplate.java diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/common/daos/impl/GenericDaoHibernateTemplate.java b/navalplanner-business/src/main/java/org/navalplanner/business/common/daos/impl/GenericDaoHibernateTemplate.java deleted file mode 100644 index c12176d7c..000000000 --- a/navalplanner-business/src/main/java/org/navalplanner/business/common/daos/impl/GenericDaoHibernateTemplate.java +++ /dev/null @@ -1,161 +0,0 @@ -package org.navalplanner.business.common.daos.impl; - -import java.io.Serializable; -import java.lang.reflect.Method; -import java.lang.reflect.ParameterizedType; -import java.util.List; - -import org.hibernate.LockMode; -import org.hibernate.Session; -import org.hibernate.SessionFactory; -import org.hibernate.StaleObjectStateException; -import org.hibernate.criterion.Projections; -import org.hibernate.criterion.Restrictions; -import org.navalplanner.business.common.daos.IGenericDao; -import org.navalplanner.business.common.exceptions.InstanceNotFoundException; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.orm.hibernate3.HibernateCallback; -import org.springframework.orm.hibernate3.HibernateTemplate; - -// FIXME: This class is not currently used. I prefer GenericDaoHibernate, since -// it represents a non-intrusive use of Spring. - -/** - * An implementation of IGenericDao based on Spring's - * HibernateTemplate. Concrete DAOs must extend directly from - * this class. This constraint is imposed by the constructor of this class that - * must infer the type of the entity from the concrete DAO declaration.

- * - * This class autowires a SessionFactory bean and allows to - * implement Spring's HibernateTemplate-based DAOs. Subclasses access - * HibernateTemplate by calling on - * getHibernateTemplate() method. - * - * @author Fernando Bellas Permuy - * - * @param Entity class - * @param Primary key class - */ -public class GenericDaoHibernateTemplate implements - IGenericDao { - - private Class entityClass; - - private HibernateTemplate hibernateTemplate; - - @SuppressWarnings("unchecked") - public GenericDaoHibernateTemplate() { - this.entityClass = (Class) ((ParameterizedType) getClass() - .getGenericSuperclass()).getActualTypeArguments()[0]; - } - - protected HibernateTemplate getHibernateTemplate() { - return hibernateTemplate; - } - - @Autowired - public void setSessionFactory(SessionFactory sessionFactory) { - hibernateTemplate = new HibernateTemplate(sessionFactory); - } - - public void save(E entity) { - hibernateTemplate.saveOrUpdate(entity); - } - - public E merge(E entity) { - return entityClass.cast(hibernateTemplate.merge(entity)); - } - - public void checkVersion(E entity) { - - /* Get id and version from entity. */ - Serializable entityId; - long entityVersion; - - try { - - Method getIdMethod = entityClass.getMethod("getId"); - entityId = (Serializable) getIdMethod.invoke(entity); - - if (entityId == null) { - return; - } - - Method getVersionMethod = entityClass.getMethod("getVersion"); - entityVersion = (Long) getVersionMethod.invoke(entity); - - } catch (Exception e) { - throw new RuntimeException(e); - } - - /* Check version. */ - final Serializable id = entityId; - final long versionValueInMemory = entityVersion; - - hibernateTemplate.execute(new HibernateCallback() { - - public Object doInHibernate(Session session) { - - Long versionValueInDB = (Long) - session.createCriteria(entityClass). - add(Restrictions.idEq(id)). - setProjection(Projections.property("version")). - uniqueResult(); - - if (versionValueInDB == null) { - return null; - } - - if (versionValueInMemory != versionValueInDB) { - throw new StaleObjectStateException(entityClass.getName(), - id); - } - - return null; - - } - }); - - } - - public void lock(E entity) { - hibernateTemplate.lock(entity, LockMode.UPGRADE); - } - - @SuppressWarnings("unchecked") - public E find(PK id) throws InstanceNotFoundException { - - E entity = (E) hibernateTemplate.get(entityClass, id); - - if (entity == null) { - throw new InstanceNotFoundException(id, entityClass.getName()); - } - - return entity; - - } - - public boolean exists(final PK id) { - - return (Boolean) hibernateTemplate.execute(new HibernateCallback() { - public Object doInHibernate(Session session) { - return session.createCriteria(entityClass). - add(Restrictions.idEq(id)). - setProjection(Projections.id()). - uniqueResult() != null; - } - }); - - } - - public void remove(PK id) throws InstanceNotFoundException { - hibernateTemplate.delete(find(id)); - } - - @SuppressWarnings("unchecked") - @Override - public List list(Class klass) { - return hibernateTemplate.loadAll(klass); - } - -}