Bonjour,

je n'arrive pas à produire l'équivalent HQL de la requête SQL ci-après


Code SQL : 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
CREATE TABLE AEROPORT(
  Num_aeroport  INT,
  Nom_aeroport  VARCHAR(40),
 
  PRIMARY KEY(Num_aeroport));
 
 
CREATE TABLE VOL(
 
  Num_vol  INT,
  Aeroport_dep  INT,
  Aeroport_arr  INT,
 
 
  PRIMARY KEY(Num_vol),
 
  CONSTRAINT fkaeroport FOREIGN KEY (Aeroport_dep) REFERENCES AEROPORT (Num_aeroport),
  CONSTRAINT fkaeroport2 FOREIGN KEY (Aeroport_arr) REFERENCES AEROPORT (Num_aeroport)
 
);
 
INSERT INTO AEROPORT (Num_aeroport, Nom_aeroport)  VALUES ('1', 'Angers');
INSERT INTO AEROPORT (Num_aeroport, Nom_aeroport)  VALUES ('2', 'Rennes');
 
INSERT INTO VOL (Num_vol, Aeroport_dep, Aeroport_arr)  VALUES ('1', '1', '2');
INSERT INTO VOL (Num_vol, Aeroport_dep, Aeroport_arr)  VALUES ('2', '2', '1');

Requete SQL à tranformer en HQL

Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
select V.num_vol as VOL, A.nom_aeroport as DEPART, A2.nom_aeroport as ARRIVEE from 
VOL V LEFT JOIN AEROPORT A on V.aeroport_dep=A.num_aeroport LEFT JOIN AEROPORT A2 on V.aeroport_arr=A2.num_aeroport

+-----+--------+---------+
| VOL | DEPART | ARRIVEE |
+-----+--------+---------+
|   2 | Rennes | Angers  |
|   1 | Angers | Rennes  |
+-----+--------+---------+
voici la classe correspondante à la première la table

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
 
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import org.hibernate.annotations.GenericGenerator;
 
 
@Entity
@Table(name = "AEROPORT")
public class Aeroport extends EntiteGenerique implements java.io.Serializable {
 
	private static final long serialVersionUID = 1L;
 
	private int Num_aeroport;
	private String Nom_aeroport;
 
	@Override
	public String toString() {
		return  (this.Nom_aeroport);
	}
 
 
	public Aeroport() {
	}
 
	public Aeroport(int num_aeroport, String nom_aeroport) {
		this.Num_aeroport = num_aeroport;
		this.Nom_aeroport = nom_aeroport;
	}
 
 
	@Id
	@GenericGenerator(name="serial" , strategy="increment")
	@GeneratedValue(generator="serial")
	@Column(name = "Num_aeroport", unique = true, nullable = false)
 
 
 
	public int getNum_aeroport() {
		return this.Num_aeroport;
	}
 
	public void setNum_aeroport(int num_aeroport) {
		this.Num_aeroport = num_aeroport;
	}
 
	@Column(name = "Nom_aeroport", length = 255)
	public String getNom_aeroport() {
		return this.Nom_aeroport;
	}
 
	public void setNom_aeroport(String nom_aeroport) {
		this.Nom_aeroport = nom_aeroport;
	}
 
 
 
	}

La classe correspondante à la deuxième table


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
66
67
68
69
70
71
72
73
74
75
 
 
package models.entities;
 
 
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
 
import org.hibernate.annotations.GenericGenerator;
 
 
@Entity
@Table(name = "VOL")
public class Vol extends EntiteGenerique implements java.io.Serializable {
 
	private static final long serialVersionUID = 1L;
 
	private int Num_vol;
	private int Aeroport_dep;
	private int Aeroport_arr;
 
 
	@Override
	public String toString() {
		return  ("Num_vol " + Integer.toString(this.Num_vol));
	}
 
 
	public Vol() {
	}
 
	public Vol(int num_vol, int aeroport_dep, int aeroport_arr) {
		this.Num_vol = num_vol;
		this.Aeroport_dep = aeroport_dep;
		this.Aeroport_arr = aeroport_arr;
	}
 
 
	@Id
	@GenericGenerator(name="serial" , strategy="increment")
	@GeneratedValue(generator="serial")
	@Column(name = "num_vol", unique = true, nullable = false)
 
 
 
	public int getNum_vol() {
		return this.Num_vol;
	}
 
	public void setNum_vol(int num_vol) {
		this.Num_vol = num_vol;
	}
 
	@Column(name = "aeroport_dep", length = 255)
	public int getAeroport_dep() {
		return this.Aeroport_dep;
	}
 
	public void setAeroport_dep(int aeroport_dep) {
		this.Aeroport_dep = aeroport_dep;
	}
 
	@Column(name = "aeroport_arr", length = 255)
	public int getAeroport_arr() {
		return this.Aeroport_arr;
	}
 
	public void setAeroport_arr(int aeroport_arr) {
		this.Aeroport_arr = aeroport_arr;
	}
 
	}
J'ai essayé sans succès de mettre des objets Aeroport dans la class Vol avec des relations OneToOne
la difficulté que j'ai rencontré c'est que la classe Vol a besoin de 2 objet de la class Aeroport pour implémenter l' aéroport de de départ et l'aéroport d'arrivée

Pouvez S.V.P m'aider à résoudre ce problème ?