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 :

persist @ManyToMany jpa ejb3


Sujet :

JPA Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 30
    Par défaut persist @ManyToMany jpa ejb3
    salut,
    j'ai deux entités produit et propriete reliées par une association ManyToMany.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    @ManyToMany(targetEntity = Propriete.class, cascade ={ CascadeType.PERSIST , CascadeType.MERGE, CascadeType.REMOVE }, fetch=FetchType.EAGER)
      @JoinTable(name="listePropriete", joinColumns= @JoinColumn(name="refidProduit", referencedColumnName="idProduit"),
                 inverseJoinColumns=@JoinColumn(name="refidPropriete", referencedColumnName="idPropriete"))
      private List<Propriete> proprieteList=new ArrayList<Propriete>();
    Maintenant je veux ajouter des propriétés au produit voici le code des deux méthodes utilisées
    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
     
     
     //Cette méthode affiche la page qui permet de choisir les propriétés à ajouter au produit
    	  public String choisirPropriete()
    	  {
    		  proItems= new ArrayList<SelectItem>();
    		  proprieteList=locp.queryProprieteFindAll();
    		//  SelectItem item = new SelectItem(-1, "== Selectionner ==");
    		  //proItems.add(item);
    		  for(int i=0;i<proprieteList.size(); i++)
    		  {
    			  SelectItem item1 = new SelectItem(proprieteList.get(i).getIdPropriete(), proprieteList.get(i).getNaturePropriete());
    			  proItems.add(item1);		  
    		  }
    		  return"propriete";
    	  }
     
    //Cette méthode ajoute des propriétés au produit
    	  public String ajoutPropriete()
    	  {
    		  // proprieteList=locp.queryProprieteFindAll();
    		  for(int i=0;i<locp.queryProprieteFindAll().size(); i++)
    		  {
    			    pdt.getProprieteList().add(locp.ProprieteFindOnly(this.getPropriete()));
    			    //proprieteList.add(locp.ProprieteFindOnly(this.getPropriete()));
    		  }
    		  //pdt.setProprieteList(proprieteList);
    		  produitlocal.mergeEntity(pdt);
    		  return"proprieteajoutee";
    	  }
    Il me donne l'erreur au niveau de produitlocal.mergeEntity(pdt); que la transition a été annulée voici la trace
    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
     
    Caused by: javax.faces.el.EvaluationException: javax.ejb.EJBException: Transaction aborted; nested exception is: javax.transaction.RollbackException: La transaction a été marquée comme devant être annulée.
    	at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:91)
    	at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
    	... 34 more
    Caused by: javax.ejb.EJBException: Transaction aborted; nested exception is: javax.transaction.RollbackException: La transaction a été marquée comme devant être annulée.
    	at com.sun.ejb.containers.BaseContainer.completeNewTx(BaseContainer.java:3823)
    	at com.sun.ejb.containers.BaseContainer.postInvokeTx(BaseContainer.java:3596)
    	at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:1379)
    	at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:1316)
    	at com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:205)
    	at com.sun.ejb.containers.EJBLocalObjectInvocationHandlerDelegate.invoke(EJBLocalObjectInvocationHandlerDelegate.java:127)
    	at $Proxy159.mergeEntity(Unknown Source)
    	at ass.managedbean.assurance.MbeanProduit.ajoutPropriete(MbeanProduit.java:218)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    	at java.lang.reflect.Method.invoke(Method.java:585)
    	at com.sun.el.parser.AstValue.invoke(AstValue.java:187)
    	at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:297)
    	at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:77)
    	... 35 more
    j'attends votre aide svp je suis bloquée.

  2. #2
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 30
    Par défaut
    Mon problème est résolu je devais mettre le même nom donné à la liste dans mappedName voici le code dans l'entité produit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     @ManyToMany(targetEntity = Propriete.class, cascade = CascadeType.ALL , fetch=FetchType.EAGER)
      @JoinTable(name="listePropriete", joinColumns= @JoinColumn(name="refidProduit", referencedColumnName="idProduit"),
                 inverseJoinColumns=@JoinColumn(name="refidPropriete", referencedColumnName="idPropriete"))
      private List<Propriete> proprieteList=new ArrayList<Propriete>();
    et voici le code dans l'entité propriété
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    @ManyToMany(mappedBy = "proprieteList" , targetEntity = Produit.class, fetch = FetchType.LAZY , cascade = CascadeType.REFRESH)
      private List<Produit> produitList;
    et voici le code qui permet d'ajouter des propriétés au produit choisi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public String ajoutPropriete()
    	  {  	  
    		  proprieteList=pdt.getProprieteList();
    		  if(proprieteList.isEmpty())				                    System.out.println("je suis une liste vide");
    		else
    		       System.out.println("je suis une liste remplie");
    		       Propriete unep=locp.ProprieteFindOnly(this.getPropriete());
    		  proprieteList.add(unep);
    		  pdt=produitlocal.ProduitFindOnly(this.pdt.getIdProduit());
    		  pdt.setProprieteList(proprieteList);
    	               produitlocal.mergeEntity(pdt);
    		  return"proprieteajoutee";
    	  }
    Pour celui qui a le même problème voila une solution.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 11/07/2008, 14h44
  2. Réponses: 1
    Dernier message: 23/01/2008, 10h12
  3. [JPA] [EJB3] - Mapping et @ManyToOne erreur
    Par ®om dans le forum JPA
    Réponses: 29
    Dernier message: 04/03/2007, 23h31
  4. [JPA][EJB3] The @JoinColumns on the annotated element
    Par *alexandre* dans le forum JPA
    Réponses: 9
    Dernier message: 19/02/2007, 11h26
  5. Réponses: 4
    Dernier message: 15/02/2007, 10h06

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