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