Ajout d'une méthode create(entity) sur le DAO
Bonjour. J'ai ajouté une méthode create() sur le DAO qui prend une entité en paramètres. Bizarrement elle n'existait pas. Y a-t-il une raison a son absence ? Le but est de faire ce genre de code : Account myAccount = new AccountImpl() [...] myAccount = accoutDAO.create(myAccount); PS: normalement, il n'y a pas de conflit avec la methode create(Object...) mais ca aurait pu. Le 22/03/2010 18:34, echatellier@users.nuiton.org a écrit :
Author: echatellier Date: 2010-03-22 18:34:41 +0100 (Mon, 22 Mar 2010) New Revision: 1851
Log: Ajout d'une methode create(TopiaEntity) sur le DAO.
Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaDAO.java trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaDAOImpl.java
Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaDAO.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaDAO.java 2010-03-22 10:43:24 UTC (rev 1850) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaDAO.java 2010-03-22 17:34:41 UTC (rev 1851) @@ -110,6 +110,18 @@ Entity create(Map<String, Object> properties) throws TopiaException;
/** + * Permet de sauver un object instancié sans le DAO. + * + * @param e l'entité instanciée à sauver + * @return l'entité avec son topiaID valorisé + * @throws TopiaException + * + * @since 2.3.1 + * @throw TopiaException if any pb while creating datas + */ + Entity create(Entity e) throws TopiaException; + + /** * Permet d'ajouter ou de mettre a jour un objet. Cela permet d'ajouter * par exemple un objet provenant d'un autre context mais du meme type * de DAO @@ -119,6 +131,11 @@ */ Entity update(Entity e) throws TopiaException;
+ /** + * Permet de supprimer + * @param e + * @throws TopiaException + */ void delete(Entity e) throws TopiaException;
Entity findByTopiaId(String k) throws TopiaException;
Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaDAOImpl.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaDAOImpl.java 2010-03-22 10:43:24 UTC (rev 1850) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaDAOImpl.java 2010-03-22 17:34:41 UTC (rev 1851) @@ -675,6 +675,26 @@ getContext().removeTopiaEntityVetoable(entityClass, vetoable); }
+ @Override + public E create(E entity) throws TopiaException { + + // TODO EC-20100322 this code may be merged with other create() methods + try { + // first set topiaId + String topiaId = TopiaId.create(entityClass); + TopiaEntityAbstract entityAbstract = (TopiaEntityAbstract) entity; + entityAbstract.setTopiaId(topiaId); + entityAbstract.setTopiaContext(getContext()); + + // save entity + getSession().save(entity); + getContext().getFiresSupport().warnOnUpdateEntity(entity); + return entity; + } catch (HibernateException eee) { + throw new TopiaException(eee); + } + } + /** * Cette methode appelle fireVetoableCreate et fireOnCreated * Si vous la surchargé, faites attention a appeler le super
_______________________________________________ Topia-commits mailing list Topia-commits@list.nuiton.org http://list.nuiton.org/cgi-bin/mailman/listinfo/topia-commits
-- Éric <chatellier@codelutin.com> Tel: 02 40 50 29 28 http://www.codelutin.com
Le 22/03/2010 18:36, Eric Chatellier a écrit :
Bonjour.
J'ai ajouté une méthode create() sur le DAO qui prend une entité en paramètres.
Bizarrement elle n'existait pas.
Y a-t-il une raison a son absence ?
Le but est de faire ce genre de code : Account myAccount = new AccountImpl() [...] myAccount = accoutDAO.create(myAccount);
Le problème est peut-être ailleurs finalement. Dans le cas de lima, inclure une forte dépendance sur les "Impl" n'est pas forcement une bonne solution non plus. On pourrait avoir une methode "newInstance()" sur le DAO qui retourne une instance de "Impl" manipulable via son interface. Par contre, dans le cas d'utilisation d'EJB distant, faire un appel au DAO à chaque instanciation risque d'être couteux (et compliqué par rapport à un simple "new"). -- Éric <chatellier@codelutin.com> Tel: 02 40 50 29 28 http://www.codelutin.com
Le mardi 23 mars 2010 à 11:06 +0100, Eric Chatellier a écrit :
Le 22/03/2010 18:36, Eric Chatellier a écrit :
Bonjour.
J'ai ajouté une méthode create() sur le DAO qui prend une entité en paramètres.
Bizarrement elle n'existait pas.
Y a-t-il une raison a son absence ?
Le but est de faire ce genre de code : Account myAccount = new AccountImpl() [...] myAccount = accoutDAO.create(myAccount);
Le problème est peut-être ailleurs finalement.
Dans le cas de lima, inclure une forte dépendance sur les "Impl" n'est pas forcement une bonne solution non plus. En effet, c'est pas terrible
On pourrait avoir une methode "newInstance()" sur le DAO qui retourne une instance de "Impl" manipulable via son interface.
Je pense que c'est une meilleure solution. Ce n'est jamais bon d'instancier directement une entité. De plus c'est une méthode qui pourra facilement être étendu dans certains cas (valeurs par défaut, etc...). J'utilise pas mal le principe dans les services codés dans Wao et bientôt dans Pollen, une ou plusieurs méthodes getNewMyEntity pour instancier l'entité.
Par contre, dans le cas d'utilisation d'EJB distant, faire un appel au DAO à chaque instanciation risque d'être couteux (et compliqué par rapport à un simple "new").
Je pense pas que tu fera un new tout le temps non plus. Normalement tu l'instancie une fois dans un form et puis basta.
Le 23/03/2010 11:18, Florian Desbois a écrit :
Le mardi 23 mars 2010 à 11:06 +0100, Eric Chatellier a écrit :
Le but est de faire ce genre de code : Account myAccount = new AccountImpl() [...] myAccount = accoutDAO.create(myAccount);
On pourrait avoir une methode "newInstance()" sur le DAO qui retourne une instance de "Impl" manipulable via son interface.
Je pense que c'est une meilleure solution. Ce n'est jamais bon d'instancier directement une entité. De plus c'est une méthode qui pourra facilement être étendu dans certains cas (valeurs par défaut, etc...). J'utilise pas mal le principe dans les services codés dans Wao et bientôt dans Pollen, une ou plusieurs méthodes getNewMyEntity pour instancier l'entité.
La méthode existait déjà, je l'ai rendu publique (avoir pour le non, c'est le meme que Class#newInstance()). Le code précédent deviendrait donc : Account myAccount = accoutDAO.newInstance(); [...] myAccount = accoutDAO.create(myAccount); -- Éric <chatellier@codelutin.com> Tel: 02 40 50 29 28 http://www.codelutin.com
participants (2)
-
Eric Chatellier -
Florian Desbois