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 :

Recherche sur un set


Sujet :

Hibernate Java

  1. #1
    Membre confirmé Avatar de JoloKossovar
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    532
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 532
    Points : 576
    Points
    576
    Par défaut Recherche sur un set
    Salut a tous ^^
    Les noms de classe ne sont pas realiste, c'est juste un exmple
    J'ai une classe Voiture :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Class Voiture{
    long id;
    Set<Roue> roues;
    //getter & setters
    //constructor
    }
    Et la classe Roue:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Class Roue{
    long id;
    Gente gente;
    //getter & setters
    //constructor
    }
    Maintenant la classe Gente:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Class Gente{
    String modeleGente;
    //getter & setters
    //constructor
    }
    Voici mon mapping de Voiture :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <class name="Voiture"
    		table="voiture">
    		<id name="id" column="voiture_id" type="long">
    			<generator class="native" />
    		</id>
                    <property name="nameVoiture" column="nameVoiture";
    		<set name="roues" table="RoueVoiture" cascade="all">
    			<key column="voiture_id" />
    			<many-to-many column="roue_id" unique="true"
    				class="Roue" />
    		</set>
    Et enfin le mapping de roue:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <class name="Roue"
    		table="roue">
    		<id name="id" column="roue_id" type="long">
    			<generator class="native" />
    		</id>
                    <component name="gente"
    				class="Gente">
    				<property name="modeleGente" column="modeleGente" not-null="true" />
    		</component>
    Mon probleme est ici ans VoitureDao, j'ai cette fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public Siege loadVoitureSiege(String nameVoiture, String modeleGente) {
            DetachedCriteria criteria = DetachedCriteria.forClass(Voiture.class).add(Restrictions.eq("nameVoiture", nameVoiture));
            criteria.add(Restrictions.eq("roues.gente.modeleGente", modeleGente));
            List<Gente> result = getHibernateTemplate().findByCriteria(criteria);
            if (result.size() != 0)
                return (Gente) result.get(0);
            else
                return null;
        }
    cette fonction ne fonctionne pas, et me retourne une exception :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    org.hibernate.QueryException: could not resolve property:roues.gente.modeleGente of: package.etc.Voiture
    Pourquoi ai je cette exception et comment modifier mon code pour qu'elle marche ?

  2. #2
    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
    pour construire la requête correctement il te faut joindre les tables avec createCriteria, les expressions de ce type ne fonctionnent pas avec les criteria
    Nous les geeks, c'est pas qu'on a une case en moins, c'est juste qu'on compte à partir de zéro.
    Plus les choses changent, plus elles restent les mêmes

  3. #3
    Membre confirmé Avatar de JoloKossovar
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    532
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 532
    Points : 576
    Points
    576
    Par défaut
    ok, je viens de regarder un peu ce dont tu parles mais je n'arrive a avoir le bon resultat. Ma requete s'effectue bien mais elle me renvoie une voiture a la place d'une roue.


    Voila le code de la requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    DetachedCriteria criteria = DetachedCriteria.forClass(Voiture.class);
            criteria.add(Restrictions.eq("nameVoiture", nameVoiture));
            criteria.setFetchMode("roues", FetchMode.JOIN);
            criteria.createCriteria("roues").add(
                    Restrictions.eq("gente.genteModele", genteModele));
            List<Roue> result = getHibernateTemplate().findByCriteria(criteria);
    Comment puis je recupérer ma roue ? ^^

  4. #4
    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
    une criteria renvoie une liste d'objet de la classe correspondant à la première criteria créée, voiture dans ton cas...

    donc
    • soit tu renverses ta criteria pour commencer par roue
    • soit tu utilises les projections pour ne renvoyer que les infos qui t'intéressent


    la 2e option est assez fastidieuse si tu veux renvoyer un objet, puisqu'il faudra ajouter toutes les colonnes de ton objet puis ajouter un resultTransformer pour finalement reformer l'objet demandé...
    Nous les geeks, c'est pas qu'on a une case en moins, c'est juste qu'on compte à partir de zéro.
    Plus les choses changent, plus elles restent les mêmes

  5. #5
    Membre confirmé Avatar de JoloKossovar
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    532
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 532
    Points : 576
    Points
    576
    Par défaut
    ok ^^

    Bon je vais essayer Merci a toi ^^

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Recherche sur un ensemble de Data Set ?
    Par Jean_Peuplus dans le forum z/OS
    Réponses: 14
    Dernier message: 01/06/2010, 08h36
  2. Recherche sur mots de 3 lettres
    Par mamizo dans le forum Bases de données
    Réponses: 7
    Dernier message: 16/02/2005, 14h59
  3. Réponses: 2
    Dernier message: 30/11/2004, 09h42
  4. Réponses: 8
    Dernier message: 10/09/2004, 17h30
  5. Recherche sur champ calculé
    Par srvremi dans le forum Bases de données
    Réponses: 5
    Dernier message: 06/07/2004, 14h04

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