On May 13, 2011, at 1:39 AM, naneon.raym...@neuf.fr wrote:

> Hi, 
> 
> My problem is solved thanks to your advice and examples. attached the code: 
> 
> 
>               EOQualifier qualMailType = 
> EOQualifier.qualifierWithQualifierFormat(
>                               "indEmails.emailTypec=%@", argsEtu);
>               EOQualifier admQ = new 
> EOKeyValueQualifier("etuInscrAdms.etuId", 
> EOQualifier.QualifierOperatorNotEqual, NSKeyValueCoding.NullValue);

A good rule with EOF is: if you are qualifying on keys, then you are doing 
something wrong.  

As a general rule, the primary key should NOT be exposed as a class property.  
You should be able to do what you need by modeling and using relationships in 
the EOModel.


Chuck


>               EOQualifier mailQ = new 
> EOKeyValueQualifier("indEmails.indivId", 
> EOQualifier.QualifierOperatorNotEqual, NSKeyValueCoding.NullValue);
>               EOQualifier civQ = new 
> EOKeyValueQualifier("refCivilite.civilitec", 
> EOQualifier.QualifierOperatorNotEqual,      NSKeyValueCoding.NullValue);
>               qualStudents.add(admQ);
>               qualStudents.add(mailQ);
>               qualStudents.add(civQ);
>               qualStudents.add(qualMailType);
>               EOQualifier etudiantQual = new EOAndQualifier(qualStudents);
> 
> Results: 
> select count(distinct t0.INDIV_ID)  FROM GERRY.INDIVIDU t0, GERRY.IND_EMAIL 
> T2, GERRY.REF_CIVILITE T3, GERRY.ETU_INSCR_ADM T1 WHERE (T1.ETU_ID is not 
> NULL AND T2.INDIV_ID is not NULL AND T3.CIVILITE_$C is not NULL AND 
> T2.EMAIL_TYPE_$C = ?) AND t0.INDIV_ID = T2.INDIV_ID AND  t0.CIVILITE_$C = 
> T3.CIVILITE_$C AND t0.INDIV_ID = T1.ETU_ID" withBindings: 1:"UTT"(emailTypec)>
> 
> I forced the joints i.e : etuInscrAdms.etuId ===> T1.ETU_ID IS NOT NULL ===> 
> t0.INDIV_ID = T1.ETU_ID. and when I select any setting, my research takes me 
> back all students (about 10 miles) and the batch per 10 with DisplayGroup 
> makes the application very fast. 
> 
> I always stay in the corner because I know I need advice on WO 
> 
> Thank you
> 
> 
> ========================================
> 
> Message du : 12/05/2011
> De : naneon.raym...@neuf.fr
> A : "Henrique Gomes" <li...@farol.pt>, "WebObjects webobjects-dev" 
> <webobjects-dev@lists.apple.com>
> Copie à : 
> Sujet : Re: Re: Tr: Re: Re: Fetching on 2 EOMODELS using different schema in 
> DATABASE with but have relationship
> 
> 
> Hi,
> 
> I want just a filter t0.id = t1.etuId to restrict the results, that's all.
> 
> thanks
> 
> ========================================
> 
> Message du : 12/05/2011
> De : "Henrique Gomes " <li...@farol.pt>
> A : "WebObjects webobjects-dev" <webobjects-dev@lists.apple.com>
> Copie à : naneon.raym...@neuf.fr
> Sujet : Re: Tr: Re: Re: Fetching on 2 EOMODELS using different schema in 
> DATABASE with but have relationship
> 
> 
> 
> 
> Are you trying to restrict the results by filtering on a related table? Or 
> just want to fetch data from more than one table?
> Fetches in WO are always from ONE entity (table). EOF uses joins to FILTER, 
> not to add data to the result.
> If your entity A has a toMany relation to entity B, A will have a method 
> A.b() that returns an NSArray.
> On initial fetch, the data for the B relation is not fetched, and EOF will 
> fetch it from the db when the method is used, then caches the result.
> To avoid lots of one row accesses to the db, you can instruct a 
> fetchSpecification to prefetch all the 'B's when fetching from A.
> 
> Henrique Gomes
> 
> 
> On May 12, 2011, at 4:07 PM, naneon.raym...@neuf.fr wrote:
> 
> > Hi all, 
> > 
> > I could fix my problem of *Distinct* with this line: 
> > 
> > ds.fetchSpecification (). setUsesDistinct (true); 
> > 
> > Then I added to my ERXBatchingDisplayGroup 
> > fetchEtudiantViaUvDg.setDataSource (ds); 
> > the fetch is done so with disctint.
> > 
> > Now I try to do a qualifier which is a join between *individu* and 
> > *etu_insc_adm*.
> > 
> > I.e : SELECT * from individu t0, etu_insc_adm t1 WHERE t0.id = t1.etuId; 
> > 
> > How to set this qualifier : t0.id = t2.etuId ??
> > 
> > Thanks
> > 
> > ========================================
> > 
> > Message du : 12/05/2011
> > De : naneon.raym...@neuf.fr
> > A : "Chuck Hill" , "WebObjects webobjects-dev" 
> > Copie à : 
> > Sujet : Re: Re: Tr: Re: Re: Fetching on 2 EOMODELS using different schema 
> > in DATABASE with but have relationship
> > 
> > 
> > Hi Chuck,
> > 
> > I change my mind and go to try ERXBatchingDisplayGroup with a qualifier I 
> > built (see below)
> > 
> > I translate my fetch spec qualifier: 
> > 
> > nom like $nom 
> > or prenom like $prenom 
> > or indivId = $numero 
> > or etuInscrAdms.diplomec like $etuInscrAdms.diplomec 
> > or (etuInscrAdms.anUniv like $etuInscrAdms.anUniv and etuInscrAdms.prdUniv 
> > like $etuInscrAdms.prdUniv) 
> > or etuInscrAdms.niveauAdm = $etuInscrAdms.niveauAdm 
> > or (etuInscrAdms.eoVueInsuvs.uvc = $etuInscrAdms.eoVueInsuvs.uvc 
> > and etuInscrAdms.eoVueInsuvs.anUniv = $etuInscrAdms.eoVueInsuvs.anUniv 
> > and etuInscrAdms.eoVueInsuvs.prdUniv = $etuInscrAdms.eoVueInsuvs.prdUniv)
> > 
> > In this qualifier to use with my ERXBatchingDisplayGroup
> > 
> > NSMutableArray qualFinal = new NSMutableArray();
> > NSMutableArray args = new NSMutableArray();
> > NSMutableArray argsUv = new NSMutableArray();
> > NSMutableArray argsEtu = new NSMutableArray();
> > 
> > args.addObject(anUniv);
> > args.addObject(prdUniv);
> > argsUvaddObject(uv);
> > argsUv.addObject(anUniv);
> > argsUv.addObject(prdUniv);
> > argsEtu.add("03");
> > argsEtu.add("UTT");
> > 
> > EOQualifier qualNom = EOQualifier.qualifierWithQualifierFormat("nom like 
> > %@", new NSArray(nom+"*"));
> > EOQualifier qualPrenom = EOQualifier.qualifierWithQualifierFormat("prenom 
> > like %@", new NSArray(prenom+"*"));
> > EOQualifier qualNumero = 
> > EOQualifier.qualifierWithQualifierFormat("individ=%@", new NSArray(nombre));
> > 
> > EOQualifier qualPeriode = 
> > EOQualifier.qualifierWithQualifierFormat("etuInscrAdms.anUniv=%@ AND 
> > etuInscrAdms.prdUniv=%@", args);
> > EOQualifier qualDiplome = 
> > EOQualifier.qualifierWithQualifierFormat("etuInscrAdms.diplomec=%@",new 
> > NSArray(diplome));
> > EOQualifier qualNiveau = 
> > EOQualifier.qualifierWithQualifierFormat("etuInscrAdms.niveauAdm=%@",new 
> > NSArray(niveau));
> > EOQualifier qualNiveau = 
> > EOQualifier.qualifierWithQualifierFormat("etuInscrAdms.niveauAdm=%@",new 
> > NSArray(niveau));
> > EOQualifier qualUv = 
> > EOQualifier.qualifierWithQualifierFormat("etuInscrAdms.eoVueInsuvs.anUniv=%@
> >  AND etuInscrAdms.eoVueInsuvs.prdUniv=%@ AND 
> > etuInscrAdms.eoVueInsuvs.uvc=%@",argsUv);
> > 
> > EOQualifier qualEtudiant = 
> > EOQualifier.qualifierWithQualifierFormat("etuInscrAdms.diplSpecc<>%@ AND 
> > indEmails.emailTypec=%@",argsEtu);
> > 
> > qualFinal.addObject(qualNom);
> > qualFinal.addObject(qualPrenom);
> > qualFinal.addObject(qualNumero);
> > qualFinal.addObject(qualPeriode);
> > qualFinal.addObject(qualDiplome);
> > qualFinal.addObject(qualNiveau);
> > qualFinal.addObject(qualUv);
> > 
> > **EOSort
> > NSArray dgSort = new NSArray(new Object[] 
> > {EOSortOrdering.sortOrderingWithKey(EOIndividu.NOM_KEY, 
> > EOSortOrdering.CompareAscending),
> > EOSortOrdering.sortOrderingWithKey(EOIndividu.PRENOM_KEY,EOSortOrdering.CompareAscending)
> >  });
> > 
> > fetchEtudiantViaUvDg.setQualifier(new EOOrQualifier(qualFinal));
> > fetchEtudiantViaUvDg.setSortOrderings(dgSort);
> > fetchEtudiantViaUvDg.fetch();
> > 
> > Here is result : 
> > 
> > 45478 [WorkerThread0] DEBUG NSLog - evaluateExpression: <> ? AND 
> > T3.EMAIL_TYPE_$C = ?)) AND T1.AN_UNIV = T2.AN_UNIV AND T1.DIPLOME_$C = 
> > T2.DIPLOME_$C AND T1.ETU_ID = T2.ETU_ID AND T1.PRD_UNIV = T2.PRD_UNIV AND 
> > t0.INDIV_ID = T3.INDIV_ID AND t0.INDIV_ID = T1.CONSEILLER_ID" withBindings: 
> > 1:"2010"(anUniv), 2:"1A"(prdUniv), 3:"ING2"(diplomec), 4:"4"(niveauAdm), 
> > 5:"2010"(anUniv), 6:"1A"(prdUniv), 7:"11420"(uvc), 8:"03"(diplSpecc), 
> > 9:"UTT"(emailTypec)>
> > 47102 [WorkerThread0] DEBUG NSLog - 1 row(s) processed //All students
> > 
> > 47132 [WorkerThread0] DEBUG NSLog - evaluateExpression: <> ? AND 
> > T3.EMAIL_TYPE_$C = ?)) AND T1.AN_UNIV = T2.AN_UNIV AND T1.DIPLOME_$C = 
> > T2.DIPLOME_$C AND T1.ETU_ID = T2.ETU_ID AND T1.PRD_UNIV = T2.PRD_UNIV AND 
> > t0.INDIV_ID = T3.INDIV_ID AND t0.INDIV_ID = T1.CONSEILLER_ID ORDER BY 
> > UPPER(t0.NOM) ASC, UPPER(t0.PRENOM) ASC)) where eo_rownum between 1 and 10" 
> > withBindings: 1:"2010"(anUniv), 2:"1A"(prdUniv), 3:"ING2"(diplomec), 
> > 4:"4"(niveauAdm), 5:"2010"(anUniv), 6:"1A"(prdUniv), 7:"11420"(uvc), 
> > 8:"03"(diplSpecc), 9:"UTT"(emailTypec)>
> > 50212 [WorkerThread0] DEBUG NSLog - 10 row(s) processed //10 students per 
> > batch(don't use distinct)
> > 
> > My problem is this fetch don't use *disctinct* and I have several time the 
> > same student. The another problem is how to set qualifier to do natural 
> > join like :
> > A.id = B.id, when I don't have parameters for my qualifier? 
> > 
> > i.e : SELECT * FROM GERRY.INDIVIDU t0, GEST_UV.REF_CIVILITE T2, 
> > GERRY.IND_EMAIL T3, GERRY.ETU_INSCR_ADM T1 
> > WHERE t0.INDIV_ID = T3.INDIV_ID AND t0.INDIV_ID = T1.ETU_ID AND 
> > t0.CIVILITE_$C = T2.CIVILITE_$C ORDER BY UPPER(t0.NOM) ASC, 
> > UPPER(t0.PRENOM) ASC)
> > 
> > Thanks for all
> > ========================================
> > 
> > Message du : 11/05/2011
> > De : "Chuck Hill " 
> > A : naneon.raym...@neuf.fr
> > Copie à : webobjects-dev@lists.apple.com
> > Sujet : Re: Tr: Re: Re: Fetching on 2 EOMODELS using different schema in 
> > DATABASE with but have relationship
> > 
> > 
> > Hi Raymond,
> > 
> > 
> > On May 11, 2011, at 5:29 AM, naneon.raym...@neuf.fr wrote:
> > 
> >> Hi,
> >> Thanks for your reply but I use ERXBatchingDisplayGroup (see attached) and 
> >> in my search class :
> >> 
> >> individuList = EOUvOuvertes.fetchStudentViaUVz(ed, anUniv, prdUniv, 
> >> diplome, niveau, uv, nom, prenom, nombre);//get OutOfMemory here
> >> fetchEtudiantViaUvDg.setObjectArray(individuList);
> >> fetchEtudiantViaUvDg.setCurrentBatchIndex(individuList.count());
> > 
> > You should not need to do that in code. That will fetch everything all at 
> > once. You should be setting the qualifier on the fetch spec that the 
> > ERXBatchingDisplayGroup is using.
> > 
> > Data fetched from a stored procedure is just data (I think), not EOs that 
> > are fetched from an entity. That data is read only, it can't be updated. 
> > You could use a stored procedure to just fetch the primary key and then use 
> > something like ERXEOControlUtilities public static NSArray 
> > faultsForRawRowsFromEntity(EOEditingContext ec, NSArray primKeys, String 
> > entityName) to convert them into EOs.
> > 
> > 
> > Chuck
> > 
> > 
> >> thanks for your help
> >> 
> >> ========================================
> >> 
> >> Message du : 11/05/2011
> >> De : "Pascal Robert " 
> >> A : naneon.raym...@neuf.fr
> >> Copie à : susanne.schnei...@interactive-systems.de, alexis.t...@gmail.com, 
> >> ch...@global-village.net, webobjects-dev@lists.apple.com
> >> Sujet : Re: Fetching on 2 EOMODELS using different schema in DATABASE with 
> >> but have relationship
> >> 
> >> 
> >> 
> >> 
> >> Le 2011-05-11 à 07:58, naneon.raym...@neuf.fr a écrit :
> >> 
> >> > Hi,
> >> > 
> >> > I follwed all your instructions and corrected my eomodel and my fetch 
> >> > spec. give this request.
> >> > 
> >> > 33963 [WorkerThread0] DEBUG NSLog - evaluateExpression: 
> >> > "SELECT DISTINCT t0.ANC_UV_OUVERTE_ID, t0.CATEG_ID, t0.CRE_DATE, 
> >> > t0.DIPL_SPEC_$C, t0.DIPLOME_$C, t0.MAJ_AUTEUR, t0.MAJ_DATE, 
> >> > t0.NLE_UV_OUVERTE_ID, t0.UV_CREDITS_ECTS, t0.UV_OUV_ID 
> >> > FROM GEST_UV.UV_OUVERTES t0, GEST_UV.UV_OUV T1, GERRY.ETU_INSCR_ADM T3, 
> >> > GERRY.DIPLOME T2 
> >> > WHERE ((T1.AN_UNIV like ? ESCAPE '\' AND T1.PRD_UNIV like ? ESCAPE '\') 
> >> > OR t0.DIPLOME_$C like ? ESCAPE '\' OR T3.NIVEAU_ADM = ? OR T1.UV_OUV_ID 
> >> > = ?) AND t0.UV_OUV_ID = T1.UV_OUV_ID AND T2.DIPLOME_$C = T3.DIPLOME_$C 
> >> > AND t0.DIPLOME_$C = T2.DIPLOME_$C ORDER BY t0.DIPLOME_$C ASC" 
> >> > withBindings: 1:"2005"(anUniv), 2:"1A"(prdUniv), 3:"ING2"(diplomec), 
> >> > 4:"3"(niveauAdm), 5:131(uvOuvId)>
> >> > 
> >> > The problem is the time(very very very slow) it takes to return data and 
> >> > get outOfMemory exception. (see below)
> >> > 
> >> > 2520004 [WorkerThread0] DEBUG NSLog - 68758 row(s) processed
> >> 
> >> 68758 rows, that's a lot of data! If you want to display the data in a 
> >> display group, use ERXBatchingDisplayGroup from Project Wonder, this way 
> >> it will fetch only the needed objects for the current batch (eg, if you 
> >> show 10 objects at a time, ERXBatchingDisplayGroup will fetch only 10 
> >> objects per page). Something like this:
> >> 
> >> public ERXBatchingDisplayGroup dgMembers; 
> >> static EOQualifier publicMembersQualifier = Member.SHOW_PROFILE.is(true);
> >> public final static EOSortOrdering lastUpdateSort = new 
> >> EOSortOrdering(Member.DATE_LAST_MODIFICATION_KEY,EOSortOrdering.CompareDescending);
> >> 
> >> EODatabaseDataSource ds = new EODatabaseDataSource(ec, Member.ENTITY_NAME);
> >> dgMembers = new ERXBatchingDisplayGroup();
> >> dgMembers.setNumberOfObjectsPerBatch(10);
> >> dgMembers.setDataSource(ds);
> >> dgMembers.setSortOrderings(new NSArray(lastUpdateSort));
> >> dgMembers.setQualifier(publicMembersQualifier);
> >> 
> >> Even if Oracle might returns 68 758 rows fast, EOF will take a some time 
> >> to convert those 68 758 rows to EOs.
> >> 
> >> > 2520005 [WorkerThread0] DEBUG NSLog - === Commit Internal Transaction
> >> > 2527790 [WorkerThread0] WARN NSLog - Throwable occurred: 
> >> > java.lang.OutOfMemoryError: Java heap space
> >> > 2527790 [WorkerThread0] WARN NSLog - Workerthread exiting due to error, 
> >> > respawning with ID 10000...
> >> > Exception in thread "WorkerThread0" 
> >> > com.webobjects.foundation.NSForwardException 
> >> > [java.lang.OutOfMemoryError] Java heap space:java.lang.OutOfMemoryError: 
> >> > Java heap space
> >> > 
> >> > ========================================
> >> > 
> >> > Message du : 11/05/2011
> >> > De : "Susanne Schneider " 
> >> > A : naneon.raym...@neuf.fr
> >> > Copie à : webobjects-dev@lists.apple.com
> >> > Sujet : Re: Fetching on 2 EOMODELS using different schema in DATABASE 
> >> > with but have relationship
> >> > 
> >> > 
> >> > 
> >> > Hi,
> >> > 
> >> > at least in Oracle it should be possible if you
> >> > 
> >> > 1) qualify the table name with the schema name, e.g. "b.individu"
> >> > 2) allow the user of the separate schemes to select the tables from the 
> >> > other schemes.
> >> > 
> >> > If you have static (not changing) models, you can achieve the first by 
> >> > adding the scheme names to the table names in your EOModel. WO will then 
> >> > use the full qualified table names to build the fetch specification. For 
> >> > the second you have to extend your initial SQL-generation script.
> >> > 
> >> > HTH,
> >> > Susanne
> >> > 
> >> > >
> >> > > Message: 3
> >> > > Date: Tue, 10 May 2011 10:36:49 -0700
> >> > > From: Chuck Hill
> >> > > Subject: Re: Fetching on 2 EOMODELS using different schema in DATABASE
> >> > > with but have relationship
> >> > > To: naneon.raym...@neuf.fr
> >> > > Cc: WebObjects webobjects-dev
> >> > > Message-ID:
> >> > > Content-Type: text/plain; charset="us-ascii"
> >> > >
> >> > > I think this is something that EOF can't do: qualify across schemas 
> >> > > (databases in EOF's view).
> >> > >
> >> > > Chuck
> >> > >
> >> > > On May 10, 2011, at 4:49 AM, naneon.raym...@neuf.fr wrote:
> >> > >
> >> > >> Hi all,
> >> > >>
> >> > >> I have 2 models using different schema of a database. but these 
> >> > >> schemas have table which have relationship. So in my model "A", I use 
> >> > >> a fetch spec. on a table which have the maximum relation with tables 
> >> > >> in model "A" and "B".
> >> > >> So when I excute my fech spec, WO don't see the schema of model A and 
> >> > >> show exception ORA-00942 : table or view does not exist. This a the 
> >> > >> querry generate by WO on fetching :
> >> > >>
> >> > >> "SELECT t0.ANC_UV_OUVERTE_ID, t0.CATEG_ID, t0.CRE_DATE, 
> >> > >> t0.DIPL_SPEC_$C, t0.DIPLOME_$C, t0.MAJ_AUTEUR, t0.MAJ_DATE, 
> >> > >> t0.NLE_UV_OUVERTE_ID, t0.UV_CREDITS_ECTS, t0.UV_OUV_ID FROM 
> >> > >> UV_OUVERTES t0, INDIVIDU T4, UV_OUV T1, ETU_INSCR_ADM T3, DIPLOME T2 
> >> > >> WHERE ((T1.AN_UNIV like ? ESCAPE '\' AND T1.PRD_UNIV like ? ESCAPE 
> >> > >> '\') OR t0.DIPLOME_$C like ? ESCAPE '\' OR T3.NIVEAU_ADM = ? OR 
> >> > >> T1.UV_OUV_ID = ?) AND T3.CONSEILLER_ID = T4.INDIV_ID AND t0.UV_OUV_ID 
> >> > >> = T1.UV_OUV_ID AND T2.DIPLOME_$C = T3.DIPLOME_$C AND t0.DIPLOME_$C = 
> >> > >> T2.DIPLOME_$C ORDER BY T4.NOM ASC, T4.PRENOM ASC" withBindings: 
> >> > >> 1:"2005"(anUniv), 2:"1A"(prdUniv), 3:"ING2"(diplomec), 
> >> > >> 4:"1"(niveauAdm), 5:131(uvOuvId)>"
> >> > >>
> >> > >> tables INDIVIDU, ETU_INSCR_ADM and DIPLOME are table of schema B but 
> >> > >> WO can't translate it like that i.e : A.INDIVIDU or A.ETU_INSCR_ADM.
> >> > >>
> >> > >> Thanks for your help
> >> > >>
> >> > >> PS : I have a storedProcedure which return data and do the same 
> >> > >> request but I don't know how to insert it in my code and binding it 
> >> > >> with WODisplayGroup for batch view (previous, next) with 10 students 
> >> > >> per batch.
> >> > >> _____________________________________________
> > -- 
> > Chuck Hill Senior Consultant / VP Development
> > 
> > Come to WOWODC this July for unparalleled WO learning opportunities and 
> > real peer to peer problem solving! Network, socialize, and enjoy a great 
> > cosmopolitan city. See you there! http://www.wocommunity.org/wowodc11/
> > 
> > 
> > 
> > _______________________________________________
> > Do not post admin requests to the list. They will be ignored.
> > Webobjects-dev mailing list (Webobjects-dev@lists.apple.com)
> > Help/Unsubscribe/Update your Subscription:
> > http://lists.apple.com/mailman/options/webobjects-dev/lists%40farol.pt
> > 
> > This email sent to li...@farol.pt
> 
> 
> 
> 
> _______________________________________________
> Do not post admin requests to the list. They will be ignored.
> Webobjects-dev mailing list      (Webobjects-dev@lists.apple.com)
> Help/Unsubscribe/Update your Subscription:
> http://lists.apple.com/mailman/options/webobjects-dev/chill%40global-village.net
> 
> This email sent to ch...@global-village.net

-- 
Chuck Hill             Senior Consultant / VP Development

Come to WOWODC this July for unparalleled WO learning opportunities and real 
peer to peer problem solving!  Network, socialize, and enjoy a great 
cosmopolitan city.  See you there!  http://www.wocommunity.org/wowodc11/

Attachment: smime.p7s
Description: S/MIME cryptographic signature

 _______________________________________________
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list      (Webobjects-dev@lists.apple.com)
Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/webobjects-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to