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

JPA Java Discussion :

JPA - Problème de persistance non voulue


Sujet :

JPA Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2011
    Messages : 20
    Par défaut JPA - Problème de persistance non voulue
    Bonjour,

    Je suis débutante en JPA. J'ai deux entités: Student et Studentclass.
    Student à une clé étrangère qui correspond au nom d'une Studentclass.

    Cependant lorsque je persist un Student, JPA me persist aussi un Studentclass (ce qui m'engendre une duplication de primary key et donc une erreur).
    Or je ne veux pas persister Studentclass lorsque je persist un Student (ou alors je veux pouvoir ignorer l'ajout d'une clé si elle existe déjà mais pas sûre que ce soit la meilleure méthode).

    J'en appelle donc à votre aide, j'ai essayé pas mal de choses et j'ai essayer de trouver quelqu'un avec un problème similaire, en vain. Pourtant ça doit être une erreur évidente/basique... Voici mes classes et ma méthode de persistance:

    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
    @Entity(name = "studentclass")
    public class Studentclass implements Serializable{
     
    	public Studentclass() {
    		super();
    	}
     
    	public Studentclass(String name) {
    		super();
    		this.name = name;
    	}
     
    	@Id
    	private String name;
     
     
    	public String getName() {
    		return name;
    	}
     
    	public void setName(String name) {
    		this.name = name;
    	}
     
    }
    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
    @Entity(name = "student")
    public class Student implements Serializable{
     
     
    	public Student() {
    		super();
    	}
     
    	public Student(Studentclass studentclass) {
    		super();
    		this.studentclass = studentclass;
    	}
     
    	@Id
    	@Column
    	private int id;
     
    	@ManyToOne
    	@JoinColumn(name = "studentclass_name", referencedColumnName = "name", insertable = false, updatable = false)
    	private Studentclass studentclass;
     
    	public int getId() {
    		return id;
    	}
     
    	public void setId(int id) {
    		this.id = id;
    	}
     
     
    	public Studentclass getStudentclass() {
    		return studentclass;
    	}
     
    	public void setStudentclass(Studentclass studentclass) {
    		this.studentclass = studentclass;
    	}
     
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    //On suppose que les données de Studentclass ont déjà été persistées
     
    Studentclass myStudentclass= new Studentclass();
    Student myStudent = new Student();
    myStudentclass.setName("Maths"); //Qui existe donc déjà dans la base
    myStudent.setName("Delphine");
    myStudent.setStudentclass(myStudentclass);
     
    EntityManager.persist(myStudent);

    C'est là que j'obtiens une erreur de duplication car il a voulu persister un Studentclass (ce que je ne veux pas)

    Merci par avance,
    Delphine

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 276
    Par défaut
    Il faut que tu charges le Studentclass et non pas que tu en crées un autre.
    Par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Studentclass myStudentclass= entitymanager.find(Studentclass.class, "leNom");
    myStudentclass.setName("Maths"); //Qui existe donc déjà dans la base
    myStudent.setName("Delphine");
    myStudent.setStudentclass(myStudentclass);
     
    EntityManager.persist(myStudent);

  3. #3
    Membre averti
    Femme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2011
    Messages : 20
    Par défaut
    Effectivement ça paraît logique. Je n'ai plus ce problème de duplication.
    Mais je pensais que JPA pouvait le gérer automatiquement via une autre technique (en éditant le xml ou en utilisant des annotations)... m'enfin!
    Merci fr1man!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Studentclass myStudentclass= entitymanager.find(Studentclass.class, "CM1");
    myStudent.setStudentclass(myStudentclass);
    EntityManager.persist(myStudent);
    Mais maintenant ma colonne "name" de Student est vide, ses identifiants sont bien là... Le sujet est résolu, je vais donc chercher ça de mon côté mais s'il y a des idées je prends

    [EDIT]: C'est bon, il fallait mettre mes insertable et updtable à true. Encore merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème de Header: concaténation de valeur non voulu
    Par Oberown dans le forum ASP.NET MVC
    Réponses: 3
    Dernier message: 09/12/2013, 17h48
  2. [WD-2007] Problème de sélection de texte non voulue
    Par Objectiva dans le forum Word
    Réponses: 4
    Dernier message: 17/09/2011, 20h40
  3. Problème lien référencé non voulu
    Par thibotus01 dans le forum Général Conception Web
    Réponses: 14
    Dernier message: 20/08/2009, 18h03
  4. Problème d'execution non voulue au démarrage
    Par adidas40 dans le forum wxPython
    Réponses: 0
    Dernier message: 22/04/2009, 13h25
  5. Problème (éviter des caractères non voulu)
    Par Le Rebel dans le forum Langage
    Réponses: 3
    Dernier message: 16/02/2006, 13h30

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