Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 3 sur 3
  1. #1
    Membre du Club
    Inscrit en
    novembre 2008
    Messages
    305
    Détails du profil
    Informations forums :
    Inscription : novembre 2008
    Messages : 305
    Points : 55
    Points
    55

    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

  2. #2
    Membre chevronné Avatar de slim
    Homme Profil pro Salim Chami
    Ingénieur développement logiciels
    Inscrit en
    décembre 2002
    Messages
    742
    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 : 742
    Points : 786
    Points
    786

    Par défaut

    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 !

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    janvier 2007
    Messages
    1 331
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : janvier 2007
    Messages : 1 331
    Points : 1 452
    Points
    1 452

    Par défaut

    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
    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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •