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 :

Conditions sur tables jointes


Sujet :

Hibernate Java

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mars 2006
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 27
    Points : 37
    Points
    37
    Par défaut Conditions sur tables jointes
    Bonjour à tous,

    Ca fait un petit moment que je me casse la tête sur une requête.
    Tout d'abord voici le schéma de la base :


    et le code SQL de création de la base (c'est toujours plus précis) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
     
    /*==============================================================*/
    /* Table : CONTRAT                                              */
    /*==============================================================*/
    create table CONTRAT (
       ID_CONTRAT           int                  not null,
       ID_DOSSIER           int                  null,
       MONTANT_CONTRAT_HT   int                  null,
       MONTANT_CONTRAT_TTC  int                  null,
       constraint PK_CONTRAT primary key (ID_CONTRAT)
    )
    go
     
    /*==============================================================*/
    /* Table : DEVIS                                                */
    /*==============================================================*/
    create table DEVIS (
       ID_DEVIS             int                  not null,
       ID_DOSSIER           int                  null,
       MONTANT_DEVIS_HT     int                  null,
       MONTANT_DEVIS_TTC    int                  null,
       constraint PK_DEVIS primary key (ID_DEVIS)
    )
    go
     
    /*==============================================================*/
    /* Table : DOSSIER                                              */
    /*==============================================================*/
    create table DOSSIER (
       ID_DOSSIER           int                  not null,
       constraint PK_DOSSIER primary key (ID_DOSSIER)
    )
    go
     
    /*==============================================================*/
    /* Table : GARANTIE                                             */
    /*==============================================================*/
    create table GARANTIE (
       ID_GARANTIE          int                  null,
       ID_CONTRAT           int                  null,
       ID_DEVIS             int                  null,
       MONTANT_GARANTIE_HT  int                  null,
       MONTANT_GARANTIE_TTC int                  null
    )
    go
     
    alter table CONTRAT
       add constraint FK_CONTRAT_DOSSIER foreign key (ID_DOSSIER)
          references DOSSIER (ID_DOSSIER)
    go
     
    alter table DEVIS
       add constraint FK_DOSSIER_DEVIS foreign key (ID_DOSSIER)
          references DOSSIER (ID_DOSSIER)
    go
     
    alter table GARANTIE
       add constraint FK_GARANTIE_CONTRAT foreign key (ID_CONTRAT)
          references CONTRAT (ID_CONTRAT)
    go
     
    alter table GARANTIE
       add constraint FK_GARANTIE_DEVIS foreign key (ID_DEVIS)
          references DEVIS (ID_DEVIS)
    go
    Bon alors maintenant mon problème est le suivant. Je veux sélectionner tous les dossiers pour lequel au moins un des montants vaut une certaine valeur (fixée).

    J'ai plusieurs soucis : tout d'abord un dossier n'a pas forcément de devis ou de contrat -> obligation de faire un left outer join. Le second c'est que du moment que n'importe quel montant est égal à la valeur fixée alors le dossier correspondant doit appartenir à l'ensemble résultat.

    J'utilise Hibernate 3.0.5 mais si c'est plus simple à faire en 3.2 je peux changer de version.

    Le but est de réaliser cette requête en utilisant des Criteria.

    Merci pour votre aide

  2. #2
    Nouveau membre du Club
    Inscrit en
    Mars 2006
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 27
    Points : 37
    Points
    37
    Par défaut
    Bon j'ai trouvé une solution qui ne me plait qu'à moitié mais elle a le mérite de fonctionner.

    J'ai fait une requête qui me sélectionne toutes les garanties qui ont au moins un montant égal à la valeur fixée. A partir des résultats de cette requête je construis une liste de devis et de contrats qui correspondent à ces garanties.

    Je fais ensuite une requête qui sélectionne tous les devis qui ont au moins un montant égal à la valeur fixée ou qui appartiennent à la liste des devis précédemment créée. Idem pour les contrats.

    Et à partir de ces deux dernières requêtes je sélectionne les dossiers correspondants.

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

Discussions similaires

  1. Mise à jour champs par calcul sur table jointe
    Par SylvainM dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 03/03/2008, 17h38
  2. Opérations sur tables jointes
    Par fikou dans le forum VB.NET
    Réponses: 3
    Dernier message: 10/02/2008, 15h19
  3. [Oracle] Pb conditions sur tables multiples
    Par guitou12 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 04/08/2006, 15h48
  4. [SQL] Pb conditions sur tables multiples
    Par guitou12 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 04/08/2006, 13h49
  5. [MySQL] requete sur table jointe
    Par winnie82 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 21/03/2006, 16h27

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