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 :

[HQL] Comparaison de collections


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de Patriarch24
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2003
    Messages
    1 047
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 047
    Par défaut [HQL] Comparaison de collections
    Bonjour à tous,
    étant donné les classes suivantes (voir pièces jointes) :
    - AbstractUnit, représentant une unité (peu importe)
    - Step, représentant une étape de traitement d'une unité
    - UnitStepState, représentant l'état d'une unité dans une étape (fait ou pas)

    je cherche à formuler la requête suivante :
    sélectionner toutes les unités pour un ensemble d'étapes données, telles que les étapes pré-requises (données dans step.requiredSteps) ont été effectuées (unitStepState.done = true pour chaque étape requise).

    Voici une première version de la requête hql, qui ne fonctionne pas :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    select u from AbstractUnit u
    join u.stepStates uss join uss.step step
    where step in (?) and uss.done = false
    and step.requiredSteps = (
         select s from Step s, UnitStepState us
         where us.done = true and s in elements(step.requiredSteps)
    )
    Le problème vient du fait qu'on ne peut pas faire la comparaison entre step.requiredSteps et le résultat de la sous-requête.

    Quelqu'un a-t-il une solution ?
    Merci d'avance !
    Fichiers attachés Fichiers attachés

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    a vue de pif:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT u FROM AbstractUnit u
    JOIN u.stepStates uss JOIN uss.step step
    WHERE step IN (?) AND uss.done = false
    AND elements (step.requiredSteps) in elements (
         SELECT s FROM Step s, UnitStepState us
         WHERE us.done = true
    )

  3. #3
    Membre Expert
    Avatar de Patriarch24
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2003
    Messages
    1 047
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 047
    Par défaut
    perdu !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    org.springframework.orm.hibernate3.HibernateQueryException: expecting CLOSE, found 's' near line (...)
    Le problème est situé ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT u FROM AbstractUnit u
    JOIN u.stepStates uss JOIN uss.step step
    WHERE step IN (?) AND uss.done = false
    AND elements (step.requiredSteps) in elements (
         SELECT s FROM Step s, UnitStepState us
         WHERE us.done = true
    )

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    en inversant la demande peut être?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT u FROM AbstractUnit u
    JOIN u.stepStates uss JOIN uss.step step
    WHERE step IN (?) AND uss.done = false
    AND not elements exist (
         SELECT s FROM Step s, UnitStepState us
         WHERE us.done = false AND s IN elements(step.requiredSteps)
    )

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

Discussions similaires

  1. HQL: Charger explicitement plusieur collections
    Par SuperPat dans le forum JPA
    Réponses: 3
    Dernier message: 05/01/2013, 13h47
  2. LINQ TO ENTITIES - Requête impliquant une comparaison de collections
    Par mouchiche123 dans le forum Entity Framework
    Réponses: 5
    Dernier message: 19/03/2011, 19h18
  3. [IEnumerable] Comparaison de collections
    Par bakonu dans le forum Linq
    Réponses: 1
    Dernier message: 21/01/2010, 07h54
  4. HQL - Restriction sur les elements des collections
    Par 17mounir dans le forum Hibernate
    Réponses: 1
    Dernier message: 04/02/2009, 18h22
  5. [Collections] Comparaison de vector sur plusieurs critères
    Par Alexr dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 10/03/2006, 17h26

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