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 :

Comment attacher une entité en une autre en JPA


Sujet :

JPA Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 10
    Par défaut Comment attacher une entité en une autre en JPA
    Bonjour, je suis sur un projet et j'ai deux entités: User et friend. Je veux ajouter un User a partir de friend mais le programme lance une exception: detached entity passed to persist. D'aprés ce que j'ai compris , il faut attacher l'entité User à Friend. J'ai cherché partout sur le net et mon problème reste sans solution.
    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
     
    @Entity
    @Table(name="users")
    public class User {
    	@Id
    	@GeneratedValue(strategy=GenerationType.AUTO)
    	private int id; 
    	private String lastName; 
    	private String firstName; 
    	private String username; 
    	private String email;
    	private String Password;
     
    	@OneToMany(mappedBy="user")
    	private List<Friend> friends;
     
     
     
    	public List<Friend> getFriends() {
    		return friends;
    	}
    	public void setFriends(List<Friend> friends) {
    		this.friends = friends;
    	}
    	public int getId() {
    		return id;
    	}
    	public void setId(int id) {
    		this.id = id;
    	}
    	public String getLastName() {
    		return lastName;
    	}
    	public void setLastName(String lastName) {
    		this.lastName = lastName;
    	}
    	public String getFirstName() {
    		return firstName;
    	}
    	public void setFirstName(String firstName) {
    		this.firstName = firstName;
    	}
    	public String getUsername() {
    		return username;
    	}
    	public void setUsername(String username) {
    		this.username = username;
    	}
    	public String getEmail() {
    		return email;
    	}
    	public void setEmail(String email) {
    		this.email = email;
    	}
    	public String getPassword() {
    		return Password;
    	}
    	public void setPassword(String password) {
    		Password = password;
    	}
    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
     
    @Entity
    @Table(name="friends")
    public class Friend {
    	@Id
    	@GeneratedValue(strategy=GenerationType.AUTO)
    	private int id;
    	@ManyToOne(cascade={CascadeType.PERSIST,CascadeType.REMOVE,CascadeType.MERGE})
    	private User user; 
    	public int getId() {
    		return id;
    	}
    	public void setId(int id) {
    		this.id = id;
    	}
    	public User getUser() {
    		return user;
    	}
    	public void setUser(User user) {
    		this.user = user;
    	}
    }
    Le code pour attacher l'objet mais ça ne marche pas
    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
     
    public static String newRelation(Friend f){
     
    try{
    		EntityManagerFactory emf = Persistence.createEntityManagerFactory("supmessaging");
     
    		EntityManager database = emf.createEntityManager(); 
    		EntityTransaction trans = database.getTransaction(); 
    		trans.begin();
    		User attachedUser = database.merge(f.getUser());
     
    		f.setUser(attachedUser);
    		   database.persist(f);
    		trans.commit();
    		database.close();
    		emf.close();
     
    		return "ok";
    	}catch(Exception e){
    	System.err.println("Erreur : "+e.getMessage());
    	return e.getMessage();
     
     
    }
    	}

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Remplace ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    		User attachedUser = database.merge(f.getUser());
     
    		f.setUser(attachedUser);
    		   database.persist(f);
    Qui est incohérent dans le sens où tu tripotte Friend alors que t'es juste censé le sauver, par ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    		Friend activeFriend = database.merge(f);
     
    		   database.persist(activeFriend );

  3. #3
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 10
    Par défaut
    Merci! L'exception n'est plus lancé mais seulement Friend qui est enregistré , il y'a pas son user_id

  4. #4
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 10
    Par défaut
    Merci Encore. En fait il fallait simplement redémarrer l'application

  5. #5
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 10
    Par défaut Problème avec le lazy-loading
    Maintenant je veux faire le lazy laoding: récupères la liste Friends a partir de User mais il me génère l'erreur : failed to lazily initialize a collection of role:
    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
     
     
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		// TODO Auto-generated method stub
    		String text = request.getParameter("text"); 
    		PrintWriter out = response.getWriter(); 
    		HttpSession session = request.getSession();
    		User currentUser = (User)session.getAttribute("user");
    		List<User> members = UserDao.getUsersByText(text); 
    		List<Friend> friends = currentUser.getFriends();
    		  for(User u :members){  
    			  for(Friend ami :friends){
    				  if(u==ami.getFriend()){
    					  out.print("<article><h3>"+u.getUsername()+"</h3><i class='fa fa-check'></i></article>");
    				  }
    				  else{
    					  out.print("<article><h3>"+u.getUsername()+"</h3><a href='"+u.getId()+"' disabled><i class='fa fa-plus-square'></i></a></article>");
    				  }
    			  }
     
     
    		  }
    	}

  6. #6
    Membre très actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2014
    Messages
    153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mai 2014
    Messages : 153
    Par défaut
    Erreur survenant quand la cascade n'est pas bien définie.
    Mets cascade=cascadeType.ALL aussi dans le @many to one.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 17/06/2015, 17h52
  2. [MCD] Lier une Association et une Entité par une Association ?
    Par CDuv-Fr dans le forum Schéma
    Réponses: 8
    Dernier message: 10/07/2009, 01h37
  3. [MCD] Entité liée à une entitée ou à une autre selon son type
    Par kalan79 dans le forum Schéma
    Réponses: 1
    Dernier message: 26/01/2009, 21h04
  4. Réponses: 1
    Dernier message: 04/04/2008, 12h14
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48

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