Index: topia2/src/java/org/codelutin/topia/persistence/hibernate/TopiaDAOHibernate.java diff -u topia2/src/java/org/codelutin/topia/persistence/hibernate/TopiaDAOHibernate.java:1.5 topia2/src/java/org/codelutin/topia/persistence/hibernate/TopiaDAOHibernate.java:1.6 --- topia2/src/java/org/codelutin/topia/persistence/hibernate/TopiaDAOHibernate.java:1.5 Mon Jan 16 14:31:47 2006 +++ topia2/src/java/org/codelutin/topia/persistence/hibernate/TopiaDAOHibernate.java Fri Feb 24 00:51:04 2006 @@ -23,9 +23,9 @@ * * @author poussin * - * @version $Revision: 1.5 $ + * @version $Revision: 1.6 $ * - * Last update: $Date: 2006/01/16 14:31:47 $ by : $Author: thimel $ + * Last update: $Date: 2006/02/24 00:51:04 $ by : $Author: thimel $ */ package org.codelutin.topia.persistence.hibernate; @@ -40,6 +40,7 @@ import org.hibernate.Criteria; import org.hibernate.FlushMode; import org.hibernate.HibernateException; +import org.hibernate.Session; import org.hibernate.criterion.Restrictions; /** @@ -53,8 +54,7 @@ // facon on peut utiliser le framework sans la generation et sur des POJO // existant. Cela implique de faire un peu attention au codage public class TopiaDAOHibernate extends TopiaDAOAbstract { - - + /* (non-Javadoc) * @see org.codelutin.topia.TopiaDAO#create() */ @@ -64,7 +64,7 @@ // on fait un save maintenant, car puisqu'on a creer l'entity au // travers du DAO, on s'attend a l'avoir a disposition tout de // suite pour les requetes sans avoir a faire un update dessus - getContext().getHibernate().save(result); + getSession().save(result); return result; } @@ -75,7 +75,7 @@ Serializable id = getId(e); getContext().fireVetoableUpdate(entityClass, id); try { - getContext().getHibernate().saveOrUpdate(e); + getSession().saveOrUpdate(e); getContext().fireOnUpdated(entityClass, id, e); return e; } catch (HibernateException eee) { @@ -90,7 +90,7 @@ Serializable id = getId(e); getContext().fireVetoableDelete(entityClass, id); try { - getContext().getHibernate().delete(e); + getSession().delete(e); getContext().fireOnDeleted(entityClass, id, e); } catch (HibernateException eee) { throw new TopiaException(eee); @@ -103,12 +103,10 @@ @Override public Entity findByTopiaId(String k) throws TopiaException { try { - Criteria criteria = getContext().getHibernate().createCriteria(entityClass); - criteria.setFlushMode(FlushMode.AUTO); + Criteria criteria = createCriteria(FlushMode.AUTO); criteria.add(Restrictions.idEq(k)); Entity result = (Entity)criteria.uniqueResult(); return result; - } catch (HibernateException eee) { throw new TopiaException(eee); } @@ -120,8 +118,8 @@ @Override public List findAll() throws TopiaException { try { - List result = (List) getContext().getHibernate() - .createCriteria(entityClass).setFlushMode(FlushMode.AUTO).list(); + Criteria criteria = createCriteria(FlushMode.AUTO); + List result = (List)criteria.list(); return result; } catch (HibernateException eee) { throw new TopiaException(eee); @@ -147,12 +145,17 @@ public Entity findByProperties(Map properties) throws TopiaException { try { - Criteria criteria = getContext().getHibernate().createCriteria( - entityClass); - criteria.setFlushMode(FlushMode.AUTO); + Criteria criteria = createCriteria(FlushMode.AUTO); criteria.add(Restrictions.allEq(properties)); - Entity result = (Entity) criteria.uniqueResult(); - return result; + //La manière de faire suivante évite l'exception levée par + // uniqueResult lorsqu'il y a plus d'un résultat + criteria.setMaxResults(1); + List results = criteria.list(); + if (results.size() > 0) { + return (Entity)results.get(0); + } else { + return null; + } } catch (HibernateException eee) { throw new TopiaException(eee); } @@ -164,9 +167,7 @@ public List findAllByProperties(Map properties) throws TopiaException { try { - Criteria criteria = getContext().getHibernate().createCriteria( - entityClass); - criteria.setFlushMode(FlushMode.AUTO); + Criteria criteria = createCriteria(FlushMode.AUTO); criteria.add(Restrictions.allEq(properties)); List result = (List) criteria.list(); return result; @@ -175,4 +176,22 @@ } } -} + /** + * Renvoie un Criteria créé avec l'entityClass + * @param mode le FlushMode du Criteria + * @return le Criteria nouvellement créé + */ + private Criteria createCriteria(FlushMode mode) throws TopiaException { + Criteria criteria = getSession().createCriteria(entityClass); + criteria.setFlushMode(mode); + return criteria; + } + + /** + * Renvoie la Session contenue dans le contexte + */ + private Session getSession() throws TopiaException { + return getContext().getHibernate(); + } + +} //TopiaDAOHibernate Index: topia2/src/java/org/codelutin/topia/persistence/hibernate/FlatFilePersister.java diff -u topia2/src/java/org/codelutin/topia/persistence/hibernate/FlatFilePersister.java:1.1.1.1 topia2/src/java/org/codelutin/topia/persistence/hibernate/FlatFilePersister.java:1.2 --- topia2/src/java/org/codelutin/topia/persistence/hibernate/FlatFilePersister.java:1.1.1.1 Mon Jan 2 13:54:35 2006 +++ topia2/src/java/org/codelutin/topia/persistence/hibernate/FlatFilePersister.java Fri Feb 24 00:51:04 2006 @@ -1,4 +1,4 @@ -//$Id: FlatFilePersister.java,v 1.1.1.1 2006/01/02 13:54:35 bpoussin Exp $ +//$Id: FlatFilePersister.java,v 1.2 2006/02/24 00:51:04 thimel Exp $ package org.codelutin.topia.persistence.hibernate; import java.io.Serializable; @@ -33,7 +33,7 @@ import org.hibernate.util.EqualsHelper; /** - * L'idee pour pouvoir indique dans quelle repertoire sauver les fichiers + * L'idee pour pouvoir indiquer dans quelle repertoire sauver les fichiers * est de prendre comme repertoire de base la propriete * System.getProperty("topia.flatfile.directory." + ObjectUtils.identityToString(factory)) * Il faudra donc creer cette propriete lorsque l'on creer la factory