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 :

TopLink en J2SE, persistance des associations


Sujet :

JPA Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Inscrit en
    Juin 2008
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 4
    Par défaut TopLink en J2SE, persistance des associations
    Salut tout le monde,
    j'ai un problème pour mettre en place la persistance des données en J2SE avec TopLink.

    En fait, pour faire simple, j'ai une ville avec des rues :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public class Ville implements Serializable {
    ...
    @OneToMany(cascade = {CascadeType.PERSIST, CascadeType.REMOVE}, mappedBy = "ville", fetch = FetchType.LAZY)
    private List<Rue> rues;
    ...
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public class Rue implements Serializable {
    ...
    @ManyToOne
    @JoinColumn(name = "VILLE", nullable = false)
    private Ville ville;
    ...
    Bon ce que j'aimerais faire (parce que c'est une application J2SE), c'est qu'on puisse construire sa ville (ça c'est bon) et quand on sauvegarde la ville, elle se persiste toute entière (c'est bon aussi) et non au faire et à mesure qu'on la construit. Ensuite, on peut charger la ville pour la modifier (chargement tout roule).

    C'est maintenant que ça va pas aller, si j'ajoute des rues et que je sauvegarde la ville tout va bien elles sont insérées dans la base par contre si j'en supprime ça coince.
    Bah oui, la rue que j'ai supprimé je l'ai enlevé de la liste des rues de la ville mais elle reste quelque part dans le contexte de persistance du coup quand je persiste la ville il veut mettre a jour la rue avec ville comme null (c'est toi qu'est null )

    Bon, j'attends les réactions parce que j'ai essayé plein de truc alors je veux savoir quelles sont vos expériences sur ce genre de chose.

  2. #2
    Futur Membre du Club
    Inscrit en
    Juin 2008
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 4
    Par défaut
    Re.

    j'apporte des precisions, tout d'abrt le code pour enregistrer ma ville :
    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
     
    public void enregistre(Ville v) {
    		EntityTransaction tx = em.getTransaction();
    		try {
    			tx.begin();
    			Ville ville = em.find(Ville.class, v.getId());
    			if(ville != null) { // ville managed
    				em.remove(ville);
    				em.flush();
    			}
    			em.persist(v);
    			tx.commit();
    		} catch (Exception e) {
    			tx.rollback();
    			e.printStackTrace();
    		}
    	}
    en fait je supprime la ville si elle existe deja puis j'insere la nouvelle avec les modif, j'ai fait ca car je voulais que si je supprime des rues dans ma ville, ces rues en question ne soient plus dans la base mais ca marche pas. J'ai l'erreur suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Error Code: 0
    Call: UPDATE RUE SET VILLE = ? WHERE (ID_RUE = ?)
    	bind => [null, 95]
    que faire?

  3. #3
    Futur Membre du Club
    Inscrit en
    Juin 2008
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 4
    Par défaut
    J'ai pas trop envie de supprimer une rue de la base de donnée dès que l'administrateur supprime une rue (application J2SE == doit etre performant au niveau de l'interface) car cela rique de ralentir mon appli si j'effectue des requetes a chaque modif (imaginons une base lente, l'admin il va ).
    Donc ce que je voudrais c'est que l'enregistrement globale ce fasse quand il le souhaite (avec curseur d'attente voir barre de progresse).

    Aller, reponder, promis je ne me moque pas!

  4. #4
    Futur Membre du Club
    Inscrit en
    Juin 2008
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 4
    Par défaut
    Finalement, si je supprime du contexte de persistance une rue (em.remove(rue)), sans transaction sans la supprimer de la ville (ville.removeRue(rue)) puis que je fait em.merge(ville) tout baigne il supprime juste la rue de la base mais vous l'avez vu il y a une hic. En effet, dans mon appli ya toujours ma rue dans ma ville.

    En résumé :
    - suppression dans l'EntityManager (em.remove()) mais pas dans la ville (ville .removeRue()) ==> tout baigne.
    - suppression dans l'EntityManager (em.remove()) et dans la ville (ville .removeRue()) ==> ERREUR: il veut faire un update de ma rue avec une valeur null.
    - suppression dans la ville (ville .removeRue()) mais pas dans l'EntityManager (em.remove()) ==> ERREUR: idem

    Conclusion :
    Si je ne peux sauvegarder ma ville quand je le veux (dans le menu par exemple) et que je suis obligé de faire les modif à la volée (c-a-d dès qu'il y a un evenement on repercute sur la base) c'est nulle, parce que l'admin s'il se renconte qu'il ne supprimait pas les bonnes rues, ba, il a dans le baba.

    Que dois-je faire :
    Je crois que ma seule solution est de tout reprendre avec JDBC tout seule sans JPA mais la j'en est pour trop de temps.


    Je vous remercie de m'avoir écouté, ce fut un monologue passionnant, j'aurai aimé quelques échanges mais c'est pas grave.

  5. #5
    Membre chevronné Avatar de bassim
    Homme Profil pro
    Ingénieur Réseaux
    Inscrit en
    Février 2005
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2005
    Messages : 666
    Par défaut
    Bonjour,
    As tu essayé de supprimer d'abord la rue de la liste des rues de la ville:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ville .removeRue(rue);
    //trasaction
    em.remove(rue);
    // fin transaction
    et pas de flush après le remove

Discussions similaires

  1. [Mapping] @IdClass force le persist des objects associés
    Par dush_ dans le forum Hibernate
    Réponses: 0
    Dernier message: 20/05/2012, 14h44
  2. Persistance des objets : comment ?
    Par SteelBox dans le forum C++
    Réponses: 1
    Dernier message: 28/11/2005, 21h47
  3. [Struts][DynaActionForm et persistance des objets]
    Par jcos dans le forum Struts 1
    Réponses: 4
    Dernier message: 22/12/2004, 09h15
  4. Persistance des données en mémoire
    Par giviz dans le forum Architecture
    Réponses: 13
    Dernier message: 21/12/2004, 09h44
  5. [Strategie]persistance des données
    Par altropus dans le forum Persistance des données
    Réponses: 6
    Dernier message: 04/11/2004, 04h36

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