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 :

Hibernate 3 requête in elements [HQL]


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    230
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 230
    Par défaut Hibernate 3 requête in elements
    Bonjour,

    J'ai une question sur une requête HQL.
    Une socièté comporte 1..* utilisateurs.
    Un utilisateur appartient à 1 seule société.
    La classe Society contient une liste d'utilisateurs : users(avec lazy loading).
    Mon but est de retrouver la société pour un utilisateur donné.
    Voici ma requête HQL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    FROM Society society
    LEFT JOIN FETCH society.users users 
    WHERE :user IN ELEMENTS(users)
    Ce code ne marche pas, il me met une exception
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java.lang.StringIndexOutOfBoundsException: String index out of range: -5
    Si quelqu'un pourrait m'expliquer pourquoi ??

    merci d'avance

  2. #2
    Membre chevronné
    Homme Profil pro
    Ed Nat
    Inscrit en
    Janvier 2013
    Messages
    325
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Ed Nat
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2013
    Messages : 325
    Par défaut
    Bonjour,
    Ca fonctionne si tu mets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    FROM Society society
    LEFT JOIN FETCH society.users
    WHERE :user IN ELEMENTS(society.users)

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    230
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 230
    Par défaut
    Merci, j'ai cherché mais je n'avais pas essayé de faire ça ! Bizarre que ma solution ne fonctionne pas, tu saurais me dire pourquoi ?

    En fait en attendant d'avoir une solution, j'ai essayé ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    FROM Society society
    LEFT JOIN FETCH society.users users 
    WHERE users = :user
    Ce code ci-dessus fonctionne également.
    et là je ne comprends pas pourquoi ce code fonctionne? Quelle est la différence avec le code du départ; en utilisant IN ELEMENTS.
    si j'essaye d'en faire une explication, dans le code ci-dessus, je compare une instance de la classe User avec une liste d'instance de la classe User???
    J'ai du louper un truc mais quoi ?

    Merci d'avance pour tes explications.

  4. #4
    Membre chevronné
    Homme Profil pro
    Ed Nat
    Inscrit en
    Janvier 2013
    Messages
    325
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Ed Nat
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2013
    Messages : 325
    Par défaut
    Bonjour,
    c'est juste l'utilisation de l'alias users que tu avais défini sur society.users qui ne passait pas dans le IN ELEMENTS(users)...
    Mon explication : HQL interprète, et généralement le fait bien, mais pas ça

    Penser à marquer Résolu si c'est le cas

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    230
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 230
    Par défaut
    Avant de mettre résolu, j'aurais aimé savoir la différence entre ces 2 requêtes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    FROM Society society
    LEFT JOIN FETCH society.users
    WHERE :user IN ELEMENTS(society.users)
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    FROM Society society
    LEFT JOIN FETCH society.users users 
    WHERE users = :user
    merci d'avance pour vos lumières...

  6. #6
    Membre chevronné
    Homme Profil pro
    Ed Nat
    Inscrit en
    Janvier 2013
    Messages
    325
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Ed Nat
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2013
    Messages : 325
    Par défaut
    Bonjour,
    si tu actives l'affichage sql :
    <property name="show_sql">true</property>
    Tu verras une grosse différence...
    La 2ème requête HQL est meilleure, puisqu'elle ne fait pas appel à une requête imbriquée, contrairement à la 1ère

    donc pour plus d'efficacité :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    FROM Society society
    LEFT JOIN FETCH society.users users 
    WHERE users = :user
    Et l'efficacité est une préoccupation légitime avec les ORMs !

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

Discussions similaires

  1. [Core] Hibernate, sous-requête, et SQL natif
    Par Renaud-62 dans le forum Hibernate
    Réponses: 1
    Dernier message: 23/08/2012, 11h13
  2. [Hibernate 2]Requête SQL native sur plusieurs tables
    Par Giovanny Temgoua dans le forum Hibernate
    Réponses: 0
    Dernier message: 06/04/2010, 16h10
  3. [Hibernate Search] requêtes mixtes
    Par Jedy dans le forum Hibernate
    Réponses: 0
    Dernier message: 28/09/2008, 12h28
  4. [Hibernate] Suppression d'un element d'une collection
    Par K-Kaï dans le forum Hibernate
    Réponses: 8
    Dernier message: 31/05/2006, 15h15
  5. [HIBERNATE] - Débutant - Requête croisées
    Par charlot44 dans le forum Hibernate
    Réponses: 19
    Dernier message: 14/06/2005, 16h06

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