On 27/10/2010 13:17, Julien NICOLAS wrote:

Les flow sont-t-ils bien lié (topiaId) au workstation en question ?

Oui, vérifié dans la base.

(en regardant vite fait votre code, les flows sont créé non lié
et ils sont seulement lié lorsqu'ils sont démarré).

Exactement, est-ce que cela pose un problème ?
 
> Pourrions-nous avoir quelques explications supplémentaires ou liens nous
> permettant de comprendre le fonctionnement ?
J'ai pas trouver de doc rapidement.
Le principe des LazyProxy hibernate est d'aller chercher
l'information "à la demande" tant que la session est ouverte
(sinon, LazyInitialisationException)

C'est proxy hibernate implémentent l'interface "List" standard
donc, on ne voit pas la différence dans l'application.

Après, pour la mécanique interne, je n'ai jamais été voir,
mais j'imagine que les méthode de ce proxy
font les requêtes SQL qui vont bien pour renvoyer
les éléments demandés.

Ok donc, si j'ai bien compris ce que tu nous dis, la meilleure solution reste de configurer le chargement des données au cas par cas dans Hibernate.

En fait non, il est dangereux de mettre des collection en lazy = false. Je rejoins Eric sur le new ArrayList(workstation.getFlow()) qui permet une copie de la liste ce qui parcours la collection getFlow. Vu qu'on est en Lazy, Hibernate est obligé d'exécuté du SQL pour récupérer les données et les charger dans la nouvelle List. Il est également possible de faire un workstation.getFlow().size(), le size oblige également le parcours et donc le chargement Hibernate.

En topiaQuery j'ai rajouté la méthode addLoad qui permet de faire ca :

query.addLoad(Workstation.FLOW);

ou même mieux, query.addFetch(Workstation.FLOW); qui te crée une jointure avec fetch pour charger directement les données en amont et non plus à la demande.

voir http://nuiton.org/embedded/topia/topia-persistence/TopiaQuery.html#chargement-des-donnees

Mais toute facon ce n'est pas la bonne solution pour ton cas :D vu qu'il y a trop de Flow dans une Workstation.


J'avoue que si j'avais pu écrire un truc du genre :

            WorkstationDAO wsDAO = EasyFlowDAOHelper.getWorkstationDAO(pTransaction);
            Workstation workstation = wsDAO.findByName(pName);
            workstation.LoadFlowByProperties(PROPERTIE_ENDFLOW,Null);

J'avoue que cela aurait été plus naturel...

En tout cas merci
 

--
Éric <chatellier@codelutin.com>
Tel: 02 40 50 29 28
http://www.codelutin.com

_______________________________________________
Topia-users mailing list
Topia-users@list.nuiton.org
http://list.nuiton.org/cgi-bin/mailman/listinfo/topia-users

_______________________________________________ Topia-users mailing list Topia-users@list.nuiton.org http://list.nuiton.org/cgi-bin/mailman/listinfo/topia-users