Bonjour,
J'utilise JPA/Hibernate.
J'ai une classe en relation "un à un" vers une autre classe : Localisation <-> RessourceMaterielle. J'utilise les annotation pour faire la persistance.
RessourceMaterielle est abstraite. De cette classe héritent des classes telles que : Vehicule, ...
Dans la base de données la classe RessourceMaterielle n'est pas représentée par une table. Ce sont ses classes filles qui sont représentées.
Classe RessourceMaterielle :
Classe Vehicule :
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 @MappedSuperclass public abstract class RessourceMaterielle extends ObjetMetier { private String nom = null; private Localisation localisation = null; @Column(name = "`NOM`") public String getNom() { return this.nom == null ? null : new String(this.nom); } public void setNom(String nom) { this.nom = new String(nom); } @OneToOne(cascade={CascadeType.ALL}) @JoinColumn(name="`LOCALISATION`") public Localisation getLocalisation() { return this.localisation == null ? null : this.localisation.clone(); } public void setLocalisation(Localisation localisation) { this.localisation = localisation.clone(); } public RessourceMaterielle(){ } }
Classe Localisation :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 @Entity(name = "VEHICULE") @Table(name = "`VEHICULE`") public class Vehicule extends RessourceMaterielle { public Vehicule() { } }
En exécutant un test fait l'insertion d'un véhicule (qui hérite de RessourceMaterielle et donc est lié à un attribut localisation) dans la base de données, j'ai l'exception suivante. Est-ce que cette erreur est liée au fait que Vehicule n'est pas mappé, lui même, vers localisation directement ?
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 @Entity(name = "LOCALISATION") @Table(name = "`LOCALISATION`") public class Localisation extends ObjetMetier { private double lon = -1111; private double lat = -1111; private RessourceMaterielle ressourceMaterielle; @OneToOne(cascade = { CascadeType.ALL }, mappedBy = "localisation") public RessourceMaterielle getRessourceMaterielle() { return (RessourceMaterielle) (this.ressourceMaterielle == null ? null : this.ressourceMaterielle.clone()); } public void setRessourceMaterielle(RessourceMaterielle ressourceMaterielle) { this.ressourceMaterielle = ressourceMaterielle; } @Column(name = "`LON`") public double getLon() { return this.lon; } public void setLon(double lon) { this.lon = lon; } @Column(name = "`LAT`") public double getLat() { return this.lat; } public void setLat(double lat) { this.lat = lat; } public Localisation() { } public Localisation(double lon, double lat) { this.setLon(lon); this.setLat(lat); } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 org.hibernate.AnnotationException: Unknown mappedBy in: com.organisme.model.localisation.Localisation.ressourceMaterielle, referenced property unknown: com.organisme.model.ressource.RessourceMaterielle.localisation
Partager