IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Hibernate Java Discussion :

problème de criteria


Sujet :

Hibernate Java

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 17
    Points : 8
    Points
    8
    Par défaut problème de criteria
    Bonjour,

    j'ai un problème avec les criteria et les jointures...

    j'ai une classe Organisme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <hibernate-mapping package="metier.dto">
    	<class name="Organisme" table="FE_ODF_IHM" dynamic-update="false">
    		<composite-id>
    			<key-many-to-one name="nature" class="Nature" column="D_CNTRODF"/>
    			<key-many-to-one name="moyen" class="Moyen" column="D_CMOYODF"/>
    			<key-many-to-one name="codeStructure" class="CodeStructure" column="D_CRATODF"/>
    		</composite-id>
    		<property name="dateVerrouillage" column="D_DVRODF" type="date" not-null="false" length="16"/>
    		<property name="libelleOrganisme" column="D_LODF" type="string" not-null="false" length="65"/>
    	</class>	
    </hibernate-mapping>
    puis la classe CodeStructure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <hibernate-mapping package="metier.dto">
    	<class name="CodeStructure" table="FE_RATODF_IHM" dynamic-update="false">
    		<id name="id" type="string" column="D_CRATODF"/>
    		<many-to-one name="structure" column="C_CSTRODF" class="Structure" not-null="false"/>
    		<set name="listeOrganisme" inverse="true">
    			<key column="D_CRATODF"/>
    			<one-to-many class="Organisme"/>
    		</set>
    	</class>	
    </hibernate-mapping>
    puis Structure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <hibernate-mapping package="metier.dto">
    	<class name="Structure" table="FE_STRODF_IHM" dynamic-update="false">
    		<id name="id" type="string" column="D_CSTRODF"/>
    		<property name="libelle" column="D_LSTRODF" type="string" not-null="false" length="50"/>
    		<set name="listeCodeStructure" inverse="true">
    			<key column="D_CSTRODF"/>
    			<one-to-many class="CodeStructure"/>
    		</set>
    	</class>	
    </hibernate-mapping>

    Je voudrais récupérer tous les organismes répondant à certains indices de structures (champ id de la table structure)

    J'ai donc testé ca mais ca marche pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    criteria.add( Expression.in("codeStructure.structure.id",listeCodeStructure));
    mais il me mets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    org.hibernate.QueryException: could not resolve property: codeStructure.structure.id of: metier.dto.Organisme
    je ne vois pas trop comment faire...si vous avez des idées merci!!

    a++

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 17
    Points : 8
    Points
    8
    Par défaut
    un petit up..
    personne pour m'aider svp? c'est que c'est assez urgent...

  3. #3
    Membre éprouvé Avatar de Gardyen
    Homme Profil pro
    Bio informaticien
    Inscrit en
    Août 2005
    Messages
    637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bio informaticien

    Informations forums :
    Inscription : Août 2005
    Messages : 637
    Points : 1 050
    Points
    1 050
    Par défaut
    il y a 2 points que tu peux regarder

    • la construction de la criteria, la restriction doit porter sur un champ contenu dans la table que tu utilises dans la criteria: essaye un truc du genre
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
       
      Criteria criteria = session.createCriteria(Organism.class);
      criteria.createCriteria("id.codeStructure").add( Restrictions.in("structure.id",listeCodeStructure));
      au passage, Expression est semi-déprécié, profites-en pour passer aux restrictions
    • criteria et composite-id ne font pas bon ménage: il est probable que la forme au-dessus ne fonctionne pas car il y a un problème avec les composite-id et les criteria. Pour résoudre cela, il te faut mapper une deuxième fois les colonnes utilisées dans la clé en tant que property, avec les attributs insert="false" update="false". ensuite ta criteria sera identique à celle au-dessus, il faut juste remplacer id.codeStructure par codeStructure


    Bon courage !

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 17
    Points : 8
    Points
    8
    Par défaut
    merci Gardyen pour ta réponse...mais j'ai essayé les 2 possibilités et rien n'y fait cela ne fonctionne toujours pas...je ne comprends pas pourquoi...

    une autre idée please??

    merci a+

  5. #5
    Membre éprouvé Avatar de Gardyen
    Homme Profil pro
    Bio informaticien
    Inscrit en
    Août 2005
    Messages
    637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bio informaticien

    Informations forums :
    Inscription : Août 2005
    Messages : 637
    Points : 1 050
    Points
    1 050
    Par défaut
    peux tu poster le mapping de organisme, ainsi que le code où tu crées ta criteria, le tout après les modifications que je t'ai conseillées ?

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 17
    Points : 8
    Points
    8
    Par défaut
    Merci

    le mapping de Organisme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    <hibernate-mapping package="metier.dto">
            <class name="Organisme" table="FE_ODF_IHM" dynamic-update="false">
                    <composite-id>
                            <key-many-to-one name="nature" class="Nature" column="D_CNTRODF"/>
                            <key-many-to-one name="moyen" class="Moyen" column="D_CMOYODF"/>
                            <key-many-to-one name="codeStructure" class="CodeStructure" column="D_CRATODF"/>
                    </composite-id>
     
            <property name="nature" column="D_CNTRODF" type="string" length="1"
    insert="false" update="false"/>
            <property name="moyen" column="D_CMOYODF" type="string" length="1"
    insert="false" update="false"/>
            <property name="codeStructure" column="D_CRATODF" type="string" length="2"
    insert="false" update="false"/>
                    <property name="dateVerrouillage" column="D_DVRODF" type="date" not-null="false"
    length="16"/>
                    <property name="libelleOrganisme" column="D_LODF" type="string" not-null="false"
    length="65"/>
     
            </class>        
    </hibernate-mapping>
    et le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Criteria criteria = session.createCriteria(Organisme.class);
    criteria.createCriteria("codeStructure").add(Expression.in("structure.id",listeCodeStructure));
    Et j'obtiens ça comme message d'erreur :
    dans la console :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Hibernate: select this_.D_CNTRODF as D1_18_0_, this_.D_CMOYODF as D2_18_0_,
    this_.D_CRATODF as D3_18_0_, this_.D_DVRODF as D4_18_0_, this_.D_LODF as
    D5_18_0_ from FE_ODF_IHM this_ where codestruct1_.C_CSTRODF in (?) order by
    this_.D_CMOYODF asc, this_.D_CRATODF asc, this_.D_CNTRODF asc
    et dans les traces :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    2008-02-28 14:48:30,086.ERROR. 179281 [http-8080-2] ERROR org.hibernate.util.JDBCExceptionReporter  - Le préfixe de colonne 'codestruct1_' ne correspond pas à un nom de table ou à un 'alias utilisé dans la requête. La table n'a pas été spécifiée dans la clause FROM ou bien elle doit être appelée par son alias.
    2008-02-28 14:48:30,086.ERROR. 179281 [http-8080-2] ERROR dao.hibernate.OrganismeDAOImpl  - dao.hibernate.OrganismeDAOImpl / org.hibernate.exception.GenericJDBCException: could not execute query
    2008-02-28 14:48:30,086.ERROR. 179281 [http-8080-2] ERROR action.RechercherCriteresOrganisme  - action.RechercherCriteresOrganisme / org.hibernate.exception.GenericJDBCException: could not execute query
    Merci d'avance a++

  7. #7
    Membre éprouvé Avatar de Gardyen
    Homme Profil pro
    Bio informaticien
    Inscrit en
    Août 2005
    Messages
    637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bio informaticien

    Informations forums :
    Inscription : Août 2005
    Messages : 637
    Points : 1 050
    Points
    1 050
    Par défaut
    toutes mes excuses, je me suis trompé dans mon message plus haut

    il ne faut pas les remapper en property, mais en association, comme many-to-one par exemple

    ça m'apprendra à ne pas relire mes fichiers

Discussions similaires

  1. Réponses: 1
    Dernier message: 12/03/2009, 14h55
  2. API Criteria, charger une jointure, problème bizarre
    Par TiMiD dans le forum Hibernate
    Réponses: 2
    Dernier message: 17/10/2007, 17h06
  3. Problème de construction d'une requete criteria
    Par martopioche dans le forum Hibernate
    Réponses: 4
    Dernier message: 27/09/2007, 15h01
  4. Problème Criteria et setMaxResult
    Par naouna8 dans le forum Hibernate
    Réponses: 1
    Dernier message: 18/09/2007, 16h59
  5. [Criteria] Problème de date
    Par minimarch76 dans le forum Hibernate
    Réponses: 5
    Dernier message: 29/08/2007, 13h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo