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 requête avec Hibernate (JPA)


Sujet :

Hibernate Java

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    729
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 729
    Points : 250
    Points
    250
    Par défaut Problème de requête avec Hibernate (JPA)
    Bonjour,
    j'utilise des requêtes JPQL avec HIBERNATE (JPA)

    J'ai une clause OR dans ma requête qui ne me donne pas de bons résultats


    La requête suivante

    SELECT aud.oID FROM eu.eclinica.cdisc.odm.ODMAuditRecord aud WHERE (aud.subjectData is not null and aud.locationRef.location.oID = 1063 and aud.subjectData.clinicalData.study.oID = 1069 and aud.operation = 'INSERT')

    me donne une seule ligne

    1-10382


    La requête suivante

    SELECT aud.oID FROM eu.eclinica.cdisc.odm.ODMAuditRecord aud WHERE (aud.studyForDeleted.oID= 1069 and aud.locationRef.location.oID= 1063)

    me donne 2 lignes

    1-10866
    2-11370




    Quand j'utilise les 2 conditions avec une clause OR, j'obtiens seulement 1 ligne

    SELECT aud.oID FROM eu.eclinica.cdisc.odm.ODMAuditRecord aud WHERE (aud.subjectData is not null and aud.locationRef.location.oID = 1063 and aud.subjectData.clinicalData.study.oID = 1069 and aud.operation = 'INSERT') OR (aud.studyForDeleted.oID= 1069 and aud.locationRef.location.oID= 1063)


    Le résultat est

    1-10382


    J'ai enlevé une partie de la première sous requête

    and aud.subjectData.clinicalData.study.oID = 1069

    Et curieusement j'obtiens mes 3 lignes

    1-10866
    2-11370
    3-10382


    Je ne vois pas du tout pourquoi cette expression annule entièrement la deuxième sous requête

    Merci d'avance pour vos réponses

  2. #2
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 184
    Points : 1 745
    Points
    1 745
    Par défaut
    Modifier tes logs pour voir les requêtes générées devrait t'aider à comprendre le problème. Peux-être un souci de jointure.

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    729
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 729
    Points : 250
    Points
    250
    Par défaut
    Bonjour Mathieu.J et merci pour ta réponse. Excuse moi de répondre si tard

    J'ai réussi à reproduire le même phénomène sur une autre requête

    la requête complète QUERY1 est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
       query = "SELECT   a " +
                    "FROM eu.eclinica.cdisc.odm.ODMAnnotation a " +
                    "WHERE ((a.subjectData.clinicalData.study.oID = 1069 and a.seqNum = 1) or              (a.studyEventData.subjectData.clinicalData.study.oID = 1069 and a.seqNum = 1))"
    cela me donne zero résultats

    La seconde requête QUERY2 avec la première sous-requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
       query = "SELECT   a " +
                    "FROM eu.eclinica.cdisc.odm.ODMAnnotation a " +
                    "WHERE ((a.subjectData.clinicalData.study.oID = 1069 and a.seqNum = 1) "
    cela me donne un résultat Result1

    La troisième requête QUERY3 avec la seconde sous-requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
       query = "SELECT   a " +
                    "FROM eu.eclinica.cdisc.odm.ODMAnnotation a " +
                    "WHERE               (a.studyEventData.subjectData.clinicalData.study.oID = 1069 and a.seqNum = 1))"
    cela me donne un résultat Result2

    Je rappelle que le problème, c'est que la première requête devrait me donner les 2 résultats de la seconde et troisième requête, comme il y a un "OU"

    J'ai débuggé la requête faite sur la base

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    2012-03-08 14:11:37 SQL [DEBUG] select odmannotat0_.oID as oID7_, odmannotat0_.ID as ID7_, odmannotat0_.COMMENTID as COMMENTID7_, odmannotat0_.ANNOTATION_CREDT as ANNOTATION3_7_, odmannotat0_.ANNOTATION_DUEDT as ANNOTATION4_7_, odmannotat0_.FORMDATAID as FORMDATAID7_, odmannotat0_.ITEMDATAID as ITEMDATAID7_, odmannotat0_.ITEMGROUPDATAID as ITEMGRO10_7_, odmannotat0_.SEQNUM as SEQNUM7_, odmannotat0_.EVENTDATAID as EVENTDA11_7_, odmannotat0_.SUBJECTDATAID as SUBJECT12_7_, odmannotat0_.TRANSACTIONTYPE as TRANSACT6_7_ from Annotation odmannotat0_, SubjectData odmsubject1_, ClinicalData odmclinica2_, StudyEventData odmstudyev3_, SubjectData odmsubject4_, ClinicalData odmclinica5_ where odmannotat0_.SUBJECTDATAID=odmsubject1_.oID and odmsubject1_.CLINICALDATAID=odmclinica2_.oID and odmannotat0_.EVENTDATAID=odmstudyev3_.oID and odmstudyev3_.SUBJECTDATAID=odmsubject4_.oID and odmsubject4_.CLINICALDATAID=odmclinica5_.oID and (odmclinica2_.STUDYID=? and odmannotat0_.SEQNUM=1 or odmclinica5_.STUDYID=? and odmannotat0_.SEQNUM=1)
    En résumé, la requête faite sur la base est la suivante (j'utilise ici mes propres conventions)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    query = "SELECT   a " +
                    "FROM eu.eclinica.cdisc.odm.ODMAnnotation a " +
                    "WHERE a.subjectData.clinicalData c1  AND a.studyEventData.subjectData.clinicalData c2 and (c1.study.oID = 1069 and a.seqNum = 1or c2.study.oID = 1069 and a.seqNum = 1)"
    Je ne vois vraiment pas pourquoi la première partie est la suivante"a.subjectData.clinicalData c1 AND a.studyEventData.subjectData.clinicalData c2"

    car ces 2 parties devraient être utilisé avec un "OU". Vu la requête qui est envoyé, c'est normal qu'il n'y ait aucun résultat

    Comment devrais-je coder la première requête QUERY1 ?

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    729
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 729
    Points : 250
    Points
    250
    Par défaut
    Bonjour,

    je n'ai obtenu aucune réponse aussi bien sur ce forum que sur le forum hibernate.

    A votre avis où puis-je m'adresser pour avoir une réponse à coup sure

    Merci d'avance

Discussions similaires

  1. [débutant]problème avec Hibernate/JPA
    Par amnass dans le forum JPA
    Réponses: 5
    Dernier message: 19/05/2009, 16h02
  2. Problème concaténation requête avec ORACLE
    Par kobe dans le forum Bases de données
    Réponses: 2
    Dernier message: 16/08/2005, 12h57
  3. Réponses: 3
    Dernier message: 11/10/2004, 18h26
  4. problème de requête avec jointures
    Par tinhat dans le forum Requêtes
    Réponses: 7
    Dernier message: 11/08/2003, 11h33
  5. Problème dans requête avec count()
    Par BadFox dans le forum Requêtes
    Réponses: 3
    Dernier message: 08/07/2003, 19h02

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