Bonjour les Lutins,
Sire, on en a gros....
Posons le contexte :
Le
diagramme suivant représente le coeur de notre application tel que
Florian nous a aider a le faire. On s’interessera particulierement a la
relation Workstation -> Flow.
http://www.nomaka.fr/img/UML_Avant.png
Nous avons donc un contenant "Workstation" qui contient un contenu "Flow"
Notre premier code de création de Flow dans une Workstation est le suivant.
WorkstationDAO ws_dao=EasyFlowDAOHelper.getWorkstationDAO(transaction);
context.prepareTopiaId(Workstation.class, pWorkstation);
FlowDAO flow_dao=EasyFlowDAOHelper.getFlowDAO(transaction);
Flow newFlow = flow_dao.create(
,Flow.PROPERTY_BEGIN, pDate
,Flow.PROPERTY_RATIO,1);
workstation.addFlow(newFlow); // Nous considerions que le Flow etait lie a la workstation ici
ws_dao.update(pWorkstation);
transaction.commitTransaction();
Nous
nous assurions que les donnees etaient bien presentes par le chargement
de la workstation par son nom puis du Flow par son TopiaID.
Seulement
lorsque nous avons voulu charger une workstation et tout les flows qui
lui sont lies il n’y avait aucun flow associes a la workstation.
Voici la requete TopiaQuery qui nous permet de recuperer la workstation et ses Flows :
WorkstationDAO wsDAO = EasyFlowDAOHelper.getWorkstationDAO(transaction);
TopiaQuery wsQuery = wsDAO.createQuery("W");
wsQuery.addEquals(Workstation.PROPERTY_NAME,wsName);
wsQuery.addLoad(Workstation.PROPERTY_FLOW);
Workstation workstation = wsDAO.findByQuery(wsQuery);
Nous
avons alors remis en cause le diagramme precedent et nous avons modifie
la liaison Workstation / Flow comme sur le diagramme suivant :
http://www.nomaka.fr/img/UML_Apres.png
ce qui nous donne une nouvelle fonction de creation du flow comme suit :
WorkstationDAO ws_dao=EasyFlowDAOHelper.getWorkstationDAO(transaction);
context.prepareTopiaId(Workstation.class, pWorkstation);
FlowDAO flow_dao=EasyFlowDAOHelper.getFlowDAO(transaction);
Flow newFlow = flow_dao.create(
Flow.PROPERTY_WORKSTATION,pWorkstation // ici on se dit que cette fois, nous avons bien la relation....
,Flow.PROPERTY_BEGIN, pDate
,Flow.PROPERTY_RATIO,1);
pWorkstation.addFlow(newFlow);
ws_dao.update(pWorkstation);
transaction.commitTransaction();
Nous utilisons la meme methode de chargement qui ne nous renvoie toujours pas ce qu’il nous faut...
La
requete que nous avons reelement besoin est plus restrictive et utilise
un fetch mais ne recupere pas non plus le flow (logique en fait) :
WorkstationDAO wsDAO = EasyFlowDAOHelper.getWorkstationDAO(transaction);
TopiaQuery wsQuery = wsDAO.createQuery("W");
wsQuery.addEquals(Workstation.PROPERTY_NAME,wsName);
wsQuery.addFrom(Flow.class,"F");
wsQuery.addLeftJoin("W."+Workstation.PROPERTY_FLOW, null, true);
wsQuery.addWhere("F."+Flow.PROPERTY_END+" IS NULL");
Workstation workstation = wsDAO.findByQuery(wsQuery);
Nous pensons que nous avons un probleme avec nos relations dans notre diagramme UML mais nous ne voyons pas ce qui ne vas pas...
Si c’est un probleme de code, nous ne voyons pas non plus...
Quelqu’un aurait une idee ?
Julien & Guillaume
Nomaka