migrer une application qui utilise SQL vers HQL et hibernate
Bonjour,
je n'arrive pas à produire l'équivalent HQL de la requête SQL ci-après
Code:
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:
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:
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:
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 ?