Précédent   Forum du club des développeurs et IT Pro > Java > Général Java > Persistance
Persistance Forum d'entraide pour la persistance en Java : base de donnée, xml, mapping orienté objet, ... Posez vos questions sur iBatis, JDO, XmlBeans, Castor, JAXB, XStream, ...
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 04/12/2012, 15h52   #1
yo_haha
Membre du Club
 
Inscription : novembre 2008
Messages : 298
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 298
Points : 54
Points : 54
Par défaut [Hibernate / JPA] Erreur "Unknown mappedBy in .. referenced property unknown: .."

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 :
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 :
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 :
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 :
1
2
 
org.hibernate.AnnotationException: Unknown mappedBy in: com.organisme.model.localisation.Localisation.ressourceMaterielle, referenced property unknown: com.organisme.model.ressource.RessourceMaterielle.localisation
yo_haha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2013, 15h18   #2
slim
Membre émérite
 
Avatar de slim
 
Homme Salim Chami
Ingénieur développement logiciels
Inscription : décembre 2002
Messages : 731
Détails du profil
Informations personnelles :
Nom : Homme Salim Chami
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Conseil

Informations forums :
Inscription : décembre 2002
Messages : 731
Points : 845
Points : 845
Salut,

Dans tes entités, tu as des caractères bizarres... (" ` "). Essaies de les supprimer, testes et dis nous si ça fonctionne.
__________________
Do it simple... and RTFM !
slim est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2013, 17h47   #3
chtig
Membre Expert
 
Inscription : janvier 2007
Messages : 1 331
Détails du profil
Informations personnelles :
Âge : 36
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : janvier 2007
Messages : 1 331
Points : 1 561
Points : 1 561
Effectivement, les back quotes sont certainement inutiles, mais je doute qu'elles soient la cause du problème.
Dans la section "bizarre", c'est quoi ces utilisations de clone() ?

Je n'ai jamais implémenté d'héritage sans persister la classe parente, mais en regardant la javadoc de MappedSuperclass, on trouve
Citation:
A class designated with the MappedSuperclass annotation can be mapped in the same way as an entity except that the mappings will apply only to its subclasses since no table exists for the mapped superclass itself
Donc effectivement, RessourceMaterielle.localisation n'est pas un élément mappé. Seuls Vehicule.localisation l'est.
Du coup, je ne vois pas comment il est envisageable de faire un reverse mapping dans Localisation
__________________
Program manager chez TraceOne. http://www.traceone.com
chtig est déconnecté   Envoyer un message privé Réponse avec citation 20
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 22h44.


 
 
 
 
Partenaires

Hébergement Web