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 :

EJB et suppression d'enregistrement @ManyToMany


Sujet :

JPA Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 7
    Par défaut EJB et suppression d'enregistrement @ManyToMany
    Bonjour.

    Je travaille sur un projet où il y a des articles qui peuvent être écrits par un ou plusieurs auteurs.

    concretement j'ai une classe paper et une classe user.

    dans Paper:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	@ManyToMany(mappedBy="papers")	
    	private List<User> authors;
    dans User:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    	@ManyToMany(fetch=FetchType.EAGER)
    	@JoinTable(name="t_authors_papers", 
    			joinColumns=@JoinColumn(name="user_id", referencedColumnName="login"),
    			inverseJoinColumns=
    				@JoinColumn(name="paper_id", referencedColumnName="id")
    	)
    	private List<Paper> papers;
    Le probleme, c'est que je ne sais absolument pas comment faire pour effacer pour effacer un article. Dans mes EJB stateless, quand je fais em.remove(aPaper), j'ai des exceptions à cause des contraintes d'integrité, et j'arrive pas à m'en dépétrer.

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 74
    Par défaut
    supprimer un Paper peut se comprendre mais que veux tu faire les associations entre les personnes qui l'on écrit et le Paper concerné ?
    Il faudrait peut etre commencer par supprimer les associations entre les User et le Paper...

    idée en l'air:

    soit p le paper a supprimer...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    List auteurs = p.getAuthors();
    for (Author a:auteurs) {
    // Suppression de l'association, pas du paper !
    // En gros, cela supprimer l'entrée dans la table d'association USER_PAPER
    a.getPapers().remove(p); 
    }
    em.remove(p);
    C'est la différence avec les EJB2, les associations ne sont plus managées !
    le travail est à faire par le développeur (plus logique à mon avis)

    enfin c'est à creuser... mais je pense que tu as un problème de ce style....

  3. #3
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 7
    Par défaut
    effectivement c'est ce que j'avais pensé, mais le problème venait du getAuhors sur article, qui me renvoyait parfois des lazyInitialisationException, mais un bon FetchType.EAGER a réglé le problème

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 74
    Par défaut
    L'abus de EAGER peut s'avérer très négatif d'un point de vue performance: peux tu me donner une trace des requêtes sql qui sont maintenant générées lors du chargement d'un Article ? Si par hasard tu venais à positionner l'association Auteur->Article comme Eager elle aussi alors tu remontes la base ! (je charge un article qui charge les auteurs qui chargent tous les articles de tous les auteurs précédent.....) cela peut aller loin (5 niveaux as défaut je crois)

    Il vaut mieux préférer laisser Lazy et faire une requête HQL join fetch pour extraire les associations qui t'intéressent si tu le désires.



    Citation Envoyé par mister bean Voir le message
    effectivement c'est ce que j'avais pensé, mais le problème venait du getAuhors sur article, qui me renvoyait parfois des lazyInitialisationException, mais un bon FetchType.EAGER a réglé le problème

  5. #5
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 7
    Par défaut
    Citation Envoyé par denisjava Voir le message
    L'abus de EAGER peut s'avérer très négatif d'un point de vue performance: peux tu me donner une trace des requêtes sql qui sont maintenant générées lors du chargement d'un Article ? Si par hasard tu venais à positionner l'association Auteur->Article comme Eager elle aussi alors tu remontes la base ! (je charge un article qui charge les auteurs qui chargent tous les articles de tous les auteurs précédent.....) cela peut aller loin (5 niveaux as défaut je crois)

    Il vaut mieux préférer laisser Lazy et faire une requête HQL join fetch pour extraire les associations qui t'intéressent si tu le désires.
    Effectivement, le coup de la base qui remonte, faut y faire gaffe.

    Je connais pas du tout les requetes HQL join-fetch.
    Est-ce que cela me permettrait de resoudre mon problème sans utiliser le EAGER?
    Sinon pour la trace des requetes SQL, je sais pas trop comment la recupérer, mais je veuxbien regarder si ca t'interesse.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 74
    Par défaut
    select a from Article a join fetch a.authors


    Citation Envoyé par mister bean Voir le message
    Effectivement, le coup de la base qui remonte, faut y faire gaffe.

    Je connais pas du tout les requetes HQL join-fetch.
    Est-ce que cela me permettrait de resoudre mon problème sans utiliser le EAGER?
    Sinon pour la trace des requetes SQL, je sais pas trop comment la recupérer, mais je veuxbien regarder si ca t'interesse.

  7. #7
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 966
    Par défaut
    Citation Envoyé par mister bean Voir le message
    effectivement c'est ce que j'avais pensé, mais le problème venait du getAuhors sur article, qui me renvoyait parfois des lazyInitialisationException, mais un bon FetchType.EAGER a réglé le problème
    c'est une fausse solution :
    une entité ne peut avoir qu'une seule relation EAGER…
    le jour où vous aurez besoin d'une autre relation d'un même type à partir de cette entité, vous devrez trouver une vraie solution…

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2007
    Messages : 64
    Par défaut
    Bonjour, ben voilà, j'ai le meme problème.


    En fait, j'ai aussi des lazyinitializationerror, et ce, à cause que mon bean n'est pas "attaché" quand je veux l'utiliser (récupérer une liste d'autre bean qui lui sont associé, lister le nombre de bean dans la liste ...).


    C'est ici :
    http://www.developpez.net/forums/sho...d.php?t=472496

Discussions similaires

  1. Suppression d'enregistrements joints
    Par zephyr59 dans le forum Access
    Réponses: 6
    Dernier message: 04/05/2006, 23h44
  2. [ADO] Suppression des enregistrements
    Par kmaniche dans le forum C++Builder
    Réponses: 4
    Dernier message: 25/04/2006, 12h12
  3. Suppression des enregistrements maitre/détail
    Par pierrot67 dans le forum Bases de données
    Réponses: 12
    Dernier message: 31/03/2006, 13h39
  4. Réponses: 3
    Dernier message: 01/12/2005, 11h17
  5. Réponses: 6
    Dernier message: 11/10/2004, 16h43

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