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 :
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 Vehicule :
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() {
	}
 
}
Classe Localisation :
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);
	}
}
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
 
org.hibernate.AnnotationException: Unknown mappedBy in: com.organisme.model.localisation.Localisation.ressourceMaterielle, referenced property unknown: com.organisme.model.ressource.RessourceMaterielle.localisation