[JAVA/Hibernate] Problème modification clé primaire/étrangère

Problème modification clé primaire/étrangère [JAVA/Hibernate] - Java - Programmation

Marsh Posté le 01-06-2013 à 12:48:33    

Bonjour,
 
Voilà je suis actuellement entrain de réaliser un projet avec hibernate en java.
Mon application est connecté à une base de donnée où j’ai deux tables.
Une table Médicament, qui contient différentes informations sur mes médicaments.
Ainsi qu’une table Famille qui correspond à la famille de médicaments.
Autrement dit, chaque médicament appartient à une et une seule famille. Et chaque famille contient 0 à plusieurs médicaments.
Mon application a donc pour but de pouvoir modifier les différentes familles et les différentes médicaments.
Seulement quand je modifie la clé primaire de ma famille qui correspond donc à une clé étrangère dans mon médicament. Cela me met cette erreur :  

Code :
  1. 2353 [main] INFO org.hibernate.impl.SessionFactoryObjectFactory - Not binding factory to JNDI, no JNDI name configured
  2. java.lang.NullPointerException
  3. at net.gui.AjoutFamille$3.widgetSelected(AjoutFamille.java:174)
  4. at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:248)
  5. at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
  6. at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053)
  7. at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4169)
  8. at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3758)
  9. at net.gui.AjoutFamille.open(AjoutFamille.java:78)
  10. at net.gui.ListObjets$2.widgetSelected(ListObjets.java:174)
  11. at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:248)
  12. at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
  13. at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053)
  14. at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4169)
  15. at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3758)
  16. at net.gui.ListObjets.open(ListObjets.java:108)
  17. at net.gui.PageAccueil$12.linkActivated(PageAccueil.java:576)
  18. at org.eclipse.ui.forms.widgets.AbstractHyperlink.handleActivate(AbstractHyperlink.java:233)
  19. at org.eclipse.ui.forms.widgets.ImageHyperlink.handleActivate(ImageHyperlink.java:199)
  20. at org.eclipse.ui.forms.widgets.AbstractHyperlink.handleMouseUp(AbstractHyperlink.java:327)
  21. at org.eclipse.ui.forms.widgets.AbstractHyperlink.access$2(AbstractHyperlink.java:311)
  22. at org.eclipse.ui.forms.widgets.AbstractHyperlink$4.handleEvent(AbstractHyperlink.java:125)
  23. at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
  24. at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053)
  25. at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4169)
  26. at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3758)
  27. at net.gui.PageAccueil$1.run(PageAccueil.java:72)
  28. at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
  29. at net.gui.PageAccueil.open(PageAccueil.java:63)
  30. at net.gui.PageAccueil.main(PageAccueil.java:52)


 
 
 
Et voici une partie de code de mes models Famille et medicament :  
Médicament :  
       

Code :
  1. @ManyToOne(fetch = FetchType.EAGER)
  2. @JoinColumn(name = "famCode", nullable = false)
  3. public Famille getFamille() {
  4.  return this.famille;
  5. }
  6. public void setFamille(Famille famille) {
  7.  Famille oldValue = this.famille;
  8.  this.famille = famille;
  9.  firePropertyChange("famille", oldValue, famille);
  10. }


 
Famille :  
     

Code :
  1. @OneToMany(fetch = FetchType.LAZY, mappedBy = "famille", cascade = { CascadeType.ALL }, orphanRemoval = true)
  2. public Set<Medicament> getMedicaments() {
  3.  return this.medicaments;
  4. }
  5. public void setMedicaments(Set<Medicament> medicaments) {
  6.  this.medicaments = medicaments;
  7. }


 
 
Et voici le code quand je modifie ma famille :  
 

Code :
  1. Transaction transaction = session.beginTransaction();
  2.                Famille maFamille = (Famille) session.get(Famille.class,       fam.getFamCode());
  3.        maFamille.setFamCode(textCodeFamille.getText());
  4.        maFamille.setFamLibelle(textLibelleFamille.getText());
  5.  transaction.commit();
  6.  session.update(maFamille);


 
 
Je voudrais donc que quand je modifie la clé primaire de famille ca la modifie pour tous les médicaments. Je penses donc qu’il y a un problème dans l’update den cascade mais je ne sais pas comment résoudre le problème, c’est pour cela que je viens vers vous.
 
Merci d'avance,


Message édité par nyyko le 01-06-2013 à 12:53:27
Reply

Marsh Posté le 01-06-2013 à 12:48:33   

Reply

Marsh Posté le 03-06-2013 à 10:24:58    

Tu peux nous indiquer quelle ligne correspond à AjoutFamille.java:174 ?
 
Avec une NPE à cet endroit, ça m'a l'air d'être une bonne piste :o

Reply

Marsh Posté le 03-06-2013 à 11:37:37    

Il s'agit de la ligne :  
 
maFamille.setFamCode(textCodeFamille.getText());
 
Donc dans la modification de ma famille. Quand je modifie mon codeFamille qui est donc ma clé primaire
pour famille et ma clé étrangere pour medicament


Message édité par nyyko le 03-06-2013 à 11:39:10
Reply

Marsh Posté le 03-06-2013 à 11:48:06    

D'accord, et c'est lequel des deux qui est nul, maFamille ou textCodeFamille ?

Reply

Marsh Posté le 03-06-2013 à 12:17:23    

Mais enfete aucun est null, c'est juste que la modification en cascade ne doit pas se faire ?

Reply

Marsh Posté le 03-06-2013 à 13:48:48    

C'est une question ou tu as testé ?
Poste les codes de Famille et Médicament, il nous manque les getters et setters de famCode au minimum.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed