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 :

Probleme sur un tri


Sujet :

Hibernate Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 44
    Points : 28
    Points
    28
    Par défaut Probleme sur un tri
    Bonsoir,

    j'ai un petit soucis sur un tri, voici mon code :

    Job.java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    	private Integer codeId;
    	private String nom;
    	private String description;
                 etc...
    Securite.java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    	private Job job_codeId;
    	private String password;
    	private String description;
    La mapping de Securite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    	<class name="hibernateTables.Securite" table="TB_SECURITE2">
    		<composite-id>
    			<key-many-to-one name="job_codeId" column="JOB_CODEID" />
    			<key-property name="password" column="PASSWORD" />
    		</composite-id>
    		<property name="description" column="DESCRIPTION" />
    	</class>
    Et voici ma requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    		Criteria criteria = connectionBDD.createCriteria(Securite.class);		
    		criteria.addOrder(Order.asc("job_codeId.nom"));
    Donc en gros je veux récupérer tous les éléments de la table SECURITE et les trier par le nom du job auquel chaque élément est relié avec job_codeId.
    J'ai essayé en mettant à tout hasard job_codeId.nom dans le Order mais ça me renvoit une erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    org.hibernate.QueryException: could not resolve property: job_codeId.nom of: hibernateTables.Securite

    Je débute sur hibernate donc si vous avez une idée, hésitez pas !

    Merci

  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
    il te faut définir la jointure sur la table job

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Criteria criteria = connectionBDD.createCriteria(Securite.class);
    criteria.createAlias("job_codeId", "job");
    criteria.addOrder(Order.asc("job.nom"));
    ou encore

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Criteria criteria = connectionBDD.createCriteria(Securite.class).createCriteria("job_codeId");
    criteria.addOrder(Order.asc("nom"));
    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
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 44
    Points : 28
    Points
    28
    Par défaut
    Merci de ta réponse !

    Donc createAlias fait automatiquement la jointure entre job_codeId et Job ? Sans créer une nouvelle instance de Criteria si j'ai bien compris.

    J'ai essayé tes 2 solutions mais il me crache une nouvelle erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    org.hibernate.exception.SQLGrammarException: could not execute query
    java.sql.SQLException: ORA-00904: "JOB1_"."JOB_NOM" : identificateur non valide
    Apparement il n'accepte pas le Job.nom...

  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
    en cherchant sur le forum oracle tu peux trouver ce thread

    apparemment il faut utiliser les ' pour délimiter les chaines de caractères, " étant réservés aux identifiants

    peux-tu donner la requête sql générée par hibernate ?
    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
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 44
    Points : 28
    Points
    28
    Par défaut
    Bonjour,

    Voici la requête SQL générée par Hibernate :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Hibernate: select this_.JOB_CODEID as JOB1_34_0_, this_.PASSWORD as PASSWORD34_0_, this_.DESCRIPTION as DESCRIPT3_34_0_ from TB_SECURITE2 this_ order by job1_.JOB_NOM asc
    Pour ce qui est des "" et '', n'est ce pas juste quand on travaille directement en SQL ?
    En utilisant criteria, hibernate devrait faire tout seul la différence en fonction de ce qu'on lui donne non ?

  6. #6
    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
    non c'est lorsque l'on travaille directement avec oracle, mysql par exemple ne fait pas cette distinction

    mais je pense que ce n'est pas ça le problème, si tu regardes ta requête tu verras qu'elle utilise un alias non référencé (job1_)

    J'avais oublié que l'API Criteria ne gère pas les clés étrangères dans les clés composites

    il existe un workaround pour cela, il faut remapper une 2e fois ta colonne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    	<class name="hibernateTables.Securite" table="TB_SECURITE2">
    		<composite-id>
    			<key-many-to-one name="job_codeId" column="JOB_CODEID" />
    			<key-property name="password" column="PASSWORD" />
    		</composite-id>
    		<property name="description" column="DESCRIPTION" />
     
            <many-to-one name="job_codeId" insert="false" update="false">
                <column name="JOB_CODEID" not-null="true">
                </column>
            </many-to-one>
    	</class>
    à noter le
    insert="false" update="false"
    qui évite que la propriété soit prise en compte lors des modifications
    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

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 44
    Points : 28
    Points
    28
    Par défaut
    Merci beaucoup, ça fonctionne !
    Je n'aurais pas pensé à la mapper une deuxième fois.

    Merci !

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 17/07/2013, 12h06
  2. Probleme sur le tri d'un UNION
    Par Chklang dans le forum Requêtes
    Réponses: 1
    Dernier message: 28/03/2010, 22h26
  3. Réponses: 3
    Dernier message: 07/04/2003, 20h06
  4. Probleme sur un AppendChild
    Par Toxine77 dans le forum XMLRAD
    Réponses: 3
    Dernier message: 14/03/2003, 18h25
  5. Probleme sur les chaines de caractere
    Par scorpiwolf dans le forum C
    Réponses: 8
    Dernier message: 06/05/2002, 19h01

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