IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Persistance des données Java Discussion :

[Hibernate / JPA] Erreur "Unknown mappedBy in .. referenced property unknown: .."


Sujet :

Persistance des données Java

  1. #1
    Membre régulier
    Inscrit en
    Novembre 2008
    Messages
    308
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 308
    Points : 90
    Points
    90
    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 : 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

  2. #2
    Membre expérimenté Avatar de slim
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2002
    Messages
    938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2002
    Messages : 938
    Points : 1 337
    Points
    1 337
    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.
    Faites une recherche sur le forum et/ou sur internet et lisez la doc officielle avant de poser une question svp.
    et n'oubliez pas de lire les FAQ !
    FAQ Java et les cours et tutoriels Java
    Doc JAVA officielle
    AngularJS 1.x
    Angular 2

    Do it simple... and RTFM !

  3. #3
    Membre chevronné
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 348
    Points : 1 787
    Points
    1 787
    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

Discussions similaires

  1. Erreur au déploiement - Hibernate/JPA
    Par Cafeinoman dans le forum Wildfly/JBoss
    Réponses: 6
    Dernier message: 07/02/2013, 09h18
  2. Réponses: 1
    Dernier message: 28/06/2007, 18h05
  3. Hibernate-Mysql:Erreur de Connexion!!
    Par webtracker dans le forum Hibernate
    Réponses: 3
    Dernier message: 11/05/2006, 01h09
  4. [hibernate][mysql] erreurs
    Par nikalkal dans le forum Hibernate
    Réponses: 1
    Dernier message: 25/04/2006, 17h40
  5. [Hibernate] Proxy erreur
    Par DarkNagash dans le forum Hibernate
    Réponses: 2
    Dernier message: 05/08/2005, 11h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo