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 :

Update automatique avec JPA


Sujet :

JPA Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 53
    Par défaut Update automatique avec JPA
    Bonjour,

    je débute avec JPA et j'ai actuellement un petit soucis de mise à jour sur mes entités.

    J'ai deux classes, une classe Utilisateur et une classe Profils :

    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
     
    class Utilisateur{
       @ManyToMany(cascade = {CascadeType.ALL })
       @JoinTable(
    	name="utilisateur_profil"
    	, joinColumns={
    			@JoinColumn(name="id_utilisateur", nullable=false)
    	}
    	, inverseJoinColumns={
    			@JoinColumn(name="id_profil", nullable=false)
    	}
       )
       private Set<Profil> profils;
     
       .................
    }
     
    class Profil{
        @ManyToMany(cascade = {CascadeType.ALL })
        private Set<Utilisateur> utilisateurs;
        .........
    }
    Si je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Utilisateur u = UtilisateurDAO.getUtilisateur(...);
    Profil p = u.getProfils(1);
     
    Profil newP = ProfilDAO.getProfile(p.getID());
    newP.setValue("ma nouvelle valeur");
    ProfilDAO.update(newP);
    J'ai bien en base le profil avec une valeur modifiée, par contre, si je refais un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Profil p = u.getProfils(1);
    Le profil en question n'est pas changé. Il faut que je refasse un appel au DAO de Utilisateur pour répercuter les modifications.

    Est-ce possible de maintenir une cohérence entre la base et tous les objets instanciés de façon automatique avec JPA ?

    Pour info, j'utilise eclipseLink comme implémentation de JPA et ma table faisant le lien entre utilisateurs et profils est nommée "utilisateur_profil".

    Merci d'avance.

  2. #2
    Membre très actif Avatar de omarcisses
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2007
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2007
    Messages : 227
    Par défaut
    Bonjour,

    Avec ce que tu viens d’écrire je ne crois pas que ca soit possible car tu as deux objet différent. quand affiche ton objet newP tu verra les changement mais elle ne seront pas sur ton utilisateur. tu peux faire un comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    Utilisateur u = UtilisateurDAO.getUtilisateur(...);
     u.getProfils(1).setValue("ma nouvelle valeur");
    UtilisateurDAO.update(u);

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 53
    Par défaut
    Merci pour ta réponse.

    Oui, c'est la façon dont je pensais procéder quand c'est possible mais malheureusement, ce n'est pas toujours le cas.

    J'imaginais que l'unité de persistance était capable de faire le lien avec les objets qu'elle manages mais d'après ce que tu dis, ça ne semble pas être le cas.

    Par hasard, ce genre de chose est-elle possible avec hibernate (étant donné qu'il semble faire d'autres choses que simplement fournir une implémentation de JPA) ?

    Merci.

  4. #4
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Par défaut
    Bonjour,
    La solution que t'a proposée @omarcisses c'est ce qu'il faut faire localement dans ton cas, mais de manière générale, si tu veux à un moment avoir exactement les mêmes valeurs entre ta base de données et les objets managés par ton contexte de persistence, tu fais : c'est une opération de synchronisation qui peut s'averer coûteuse, donc à utiliser avec parcimonie.

Discussions similaires

  1. [XL-2010] probleme avec update automatique d'un textbox
    Par macduss dans le forum Excel
    Réponses: 1
    Dernier message: 24/06/2015, 12h03
  2. Réponses: 0
    Dernier message: 29/06/2009, 09h39
  3. Réponses: 5
    Dernier message: 02/06/2008, 16h03
  4. Réponses: 4
    Dernier message: 13/02/2008, 10h00
  5. Update champ avec le meme champ de la meme table
    Par Baquardie dans le forum Langage SQL
    Réponses: 7
    Dernier message: 04/06/2004, 11h17

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