Bonjour,
Je souhaite créer un projet java qui correspond à une base de données existante. Voilà la base de données :
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
27
28
29
30
31
32
33
34
35
36
37
38
39 CREATE TABLE cinema( nom VARCHAR(255) PRIMARY KEY, adresse VARCHAR(255) ); CREATE TABLE salle( nom VARCHAR(30) , cinema VARCHAR(255) REFERENCES cinema(nom), capacite INTEGER , PRIMARY KEY(cinema,nom) ); CREATE TABLE seance( debut TIMESTAMP, fin TIMESTAMP, salle VARCHAR(30), cinema VARCHAR(255), film VARCHAR(255), FOREIGN KEY (cinema,salle) REFERENCES salle(cinema,nom), PRIMARY KEY(cinema,salle,debut) ); CREATE TABLE client( num_client INTEGER PRIMARY KEY, nom VARCHAR(255)); CREATE TABLE reservation( id INTEGER PRIMARY KEY, seance TIMESTAMP, salle VARCHAR(30) , cinema VARCHAR(255) , quantite INTEGER , client INTEGER REFERENCES client(num_client), FOREIGN KEY (cinema,salle,seance) REFERENCES seance(cinema,salle,debut)); CREATE SEQUENCE hibernate_sequence INCREMENT 1 MINVALUE 1 MAXVALUE 9223372036854775807 START 1 CACHE 1;
J'ai créé les classe java correspondant aux classe SQL et y ai ajouté les annotations nécessaires au mapping de telle sorte à obtenir les classe suivante :
Cinema.java :
Code Java : 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 @Entity public class Cinema { @Id @Column(name="nom", nullable=false) private String nom; @Column(name="adresse") private String adresse; @OneToMany(mappedBy="cinema") private List<Salle> salleList; @OneToMany(mappedBy="cinema") private List<Seance> seanceList; @OneToMany(mappedBy="cinema") private List<Reservation> reservationList; public Cinema(String nom) { this.nom = nom; } protected Cinema() {} //Getters-Setters }
Client.java :
Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 @Entity public class Client { @Id @Column(name="num_client", nullable=false, columnDefinition = "INTEGER") private int num_client; @Column (name="nom") private String nom; @OneToMany(mappedBy="client") private List<Reservation> reservationList; //Getters-Setters }
Reservation.java :
Code Java : 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 @Entity public class Reservation { @Id @Column(name="id", nullable=false, columnDefinition = "INTEGER") private int id; @ManyToOne @JoinColumn(name="debut", nullable=false) private Seance seance; @ManyToOne @JoinColumn(name="salle", nullable=false) private Salle salle; @ManyToOne @JoinColumn(name="cinema", nullable=false) private Cinema cinema; @Column(name="quantite", columnDefinition = "INTEGER") private int quantite; @ManyToOne @JoinColumn(name="client", nullable=false) private Client client; public Reservation(Seance seance, Client client) { this.seance = seance; this.salle = seance.getSeanceId().getSalle(); this.cinema = seance.getSeanceId().getCinema(); this.client = client; } public Reservation(){} //Getters-Setters }
Salle.java :
Code Java : 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 @Entity public class Salle { @EmbeddedId private SalleId salleId; @Column(name="capacite", columnDefinition = "INTEGER") private int capacite; @OneToMany private List<Seance> seanceList; @OneToMany private List<Reservation> reservationList; protected Salle(){} public Salle(Cinema cinema) { this.salleId.setCinema(cinema); } //Getters-Setters }
SalleId.java :
Code Java : 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 @Embeddable public class SalleId implements Serializable { private static final long serialVersionUID = 1L; @Column(name="nom", nullable=false) private String nom; @ManyToOne @JoinColumn(name="nomCinema", nullable=false) private Cinema cinema; public SalleId(){} public SalleId(String nom, Cinema cinema) { this.nom = nom; this.cinema = cinema; } //Getters-Setters @Override public int hashCode() { return 0; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; return true; } }
Seance.java :
Code Java : 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 @Entity public class Seance { @EmbeddedId private SeanceId seanceId; @Column(name="fin", columnDefinition = "TIMESTAMP") private Date fin; @Column(name="film") private String film; @OneToMany private List<Reservation> reservationList; public Seance(Salle salle) { this.seanceId.setCinema(salle.getSalleId().getCinema()); this.seanceId.setSalle(salle); } public Seance(){} //Getters-Setters }
Et SeanceId.java :
Code Java : 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 @Embeddable public class SeanceId implements Serializable { private static final long serialVersionUID = 1L; @Column(name="debut", nullable=false, columnDefinition = "TIMESTAMP") private Date debut; @ManyToOne @JoinColumn(name="nomSalle", nullable=false) private Salle salle; @ManyToOne @JoinColumn(name="nomCinema", nullable=false) private Cinema cinema; public SeanceId(){} public SeanceId(Date debut, Salle salle, Cinema cinema) { this.debut = debut; this.salle = salle; this.cinema = cinema; } //Getters-Setters @Override public int hashCode() { return 0; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; return true; } }
Mais lorsque je lance mon programme de test pour vérifier la cohérence entre ma base de données et mon code, je reçois une exception avec pour cause :
Caused by: org.hibernate.AnnotationException: A Foreign key refering mif18.orm.Salle from mif18.orm.Seance has the wrong number of column. should be 2
J'avoue que je ne comprend pas vraiment ce que ça veut dire ni ce que je dois faire... J'ai cherché d'autres sujets similaires sur Google et je ne vois pas ce qui cloche dans mon code
Merci d'avance pour votre aide !
Partager