On Mon, 23 Apr 2012 18:05:17 +0200 Benjamin POUSSIN <poussin@codelutin.com> wrote:
On Mon, 23 Apr 2012 14:21:08 +0200 Florian Desbois <fdesbois@codelutin.com> wrote:
Le seul souci dans Topia, c'est que les topiaId sont générés sur la méthode create des DAO. Mais vu que dans ce cas les créations se font en cascade, on ne passe pas par la méthode create. Deux solutions : - soit appeler la méthode create sur toute les nouvelles entités (cela reviendrait à parcourir toute la collection à mettre à jour...) - soit utiliser un autre mécanisme pour générer le topiaId. (via un IdentifierGenerator[4] ou un listener sur le persist/merge[5]). Avec hibernate pur, le IdentifierGenerator semble plus approprié. En JPA on peut cependant utiliser le PrePersist pour générer le topiaId. Chose étrange, en hibernate pur, le merge n'envoie pas d'évènement prePersist pour les nouvelles entités, contrairement à la spec JPA.
Je vois une troisième solution. On ajoute dans le constructeur par défaut de TopiaEntityAbstract la creation automatique du topiaId. De cette facon une Entity a toujours un topiaId, une entity sans topiaId n'existe pas.
arch, je ne suis pas convaincu de la solution car l'absence de topiaId est le seul moyen de savoir si une entité n'est pas persistée. Changer ce comportement va avoir pas mal d'effets de bord et va rendre du code non compatible ce qui est à exclure je pense. La bonne solution à mon avis c'est de ne rien changer sur le code existant et d'autoriser la création d'id via JPA si on implante la fonction de merge.
Et l'idée de dire que peut-etre des gens feraient du Topia sans le generateur est surement obsolete. Donc toutes les entites genere heritant de TopiaEntityAbstract auront aussi un topiaId.
Non c'est pas obsolète :( sauf si on trouve un nouveau moyen pour savoir si une entité est persistée. -- Tony Chemit -------------------- tél: +33 (0) 2 40 50 29 28 email: chemit@codelutin.com http://www.codelutin.com