JDODataStoreException when querring a collection in many to many relation
Hello,
I have 2 classes Critere and SousRubrique. Each class have a reference to the other. And I want to get all the Critere objects which have a specified SousRubrique.
Here is my pojos :
package modele.pojos;
import java.util.Set;
public class Critere {
private int id; private String nom; private Set<SousRubrique> sousRubriques;
.....
//all getters and setters
}
package modele.pojos;
import java.util.Set;
public class SousRubrique {
private int id; private String nom; private Rubrique rubrique; private Set<Critere> criteres;
.....
//all getters and setters
}
and my metadata file :
<class name="SousRubrique" identity-type="application" table="sous_rubriques"> <field name="id" primary-key="true"> <column name="ID_SOUS_RUBRIQUE"/> </field> <field name="nom" > <column precision="200"/> </field> <field name="rubrique"> <column name="ID_RUBRIQUE"/> </field> <field name="criteres" table="asso_sous_rubriques_criteres" default-fetch-group="true"> <collection element-type="Critere"/> <join> <column name="ID_SOUS_RUBRIQUE"/> </join> <element> <column name="ID_CRITERE"/> </element> <extension vendor-name="jpox" key="cache-lazy-loading" value="false"/> </field> </class> <class name="Critere" identity-type="application" table="criteres"> <field name="id" primary-key="true"> <column name="id_critere"/> </field> <field name="nom"> <column precision="100"/> </field> <field name="sousRubriques" persistence-modifier="persistent" mapped-by="criteres"> <collection element-type="SousRubrique"/> </field> </class>
So when I try to get the Critere objects by this way :
public List<Critere> getCriteresBySousRubrique(SousRubrique sr){ PersistenceManager pm = null; Transaction tx = null; Collection objects = null; List<Critere> list = new ArrayList<Critere>(); try{ pm = PersistanceManageur.currentPM(false); tx = pm.currentTransaction(); tx.begin(); Query q = pm.newQuery(Critere.class, "sousRubriques.contains(sr)"); objects = (Collection) q.execute(); Iterator iter = objects.iterator(); if (! iter.hasNext()){ System.out.println("Aucune classe trouvée"); } else { while (iter.hasNext()) { list.add((Critere) iter.next()); } } tx.commit();
} catch (Exception e){ e.printStackTrace(); } finally{ if(tx.isActive()) tx.rollback(); PersistanceManageur.closePM(); } return list; }
I have this error :
javax.jdo.JDODataStoreException: Error executing JDOQL query "SELECT 'modele.pojos.Critere' AS JPOXMETADATA,THIS.ID_CRITERE,THIS.NOM,THIS.NON_AFFICHE FROM CRITERES THIS WHERE EXISTS (SELECT 1 FROM ASSO_SOUS_RUBRIQUES_CRITERES THIS_SOUSRUBRIQUES_SR,SOUS_RUBRIQUES UNBOUND_SR WHERE THIS_SOUSRUBRIQUES_SR.ID_CRITERE = THIS.ID_CRITERE AND THIS_SOUSRUBRIQUES_SR.ID_CRITERE = THIS.ID_CRITERE AND UNBOUND_SR.ID_SOUS_RUBRIQUE = THIS_SOUSRUBRIQUES_SR.ID_SOUS_RUBRIQUE)" : Erreur de syntaxe près de 'EXISTS (SELECT 1 FROM ASSO_SOUS_RUBRIQUES_CRITERES THIS_SOUSRUBR' à la ligne 1
I also tried like this :
Query q = pm.newQuery(Critere.class, "sousRubriques.contains(sr)"); q.declareParameters("SousRubrique sr"); objects = (Collection) q.execute(sr);
But I get the same error
|