Bonjour,

Voilà je suis actuellement entrain de faire un projet avec hibernate en java.
Mon application est connecté à une base de donnée où j’ai deux tables.
Une table Medicament, 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 : 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
31
32
 
 
2353 [main] INFO org.hibernate.impl.SessionFactoryObjectFactory - Not binding factory to JNDI, no JNDI name configured
java.lang.NullPointerException
	at net.gui.AjoutFamille$3.widgetSelected(AjoutFamille.java:174)
	at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:248)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053)
	at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4169)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3758)
	at net.gui.AjoutFamille.open(AjoutFamille.java:78)
	at net.gui.ListObjets$2.widgetSelected(ListObjets.java:174)
	at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:248)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053)
	at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4169)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3758)
	at net.gui.ListObjets.open(ListObjets.java:108)
	at net.gui.PageAccueil$12.linkActivated(PageAccueil.java:576)
	at org.eclipse.ui.forms.widgets.AbstractHyperlink.handleActivate(AbstractHyperlink.java:233)
	at org.eclipse.ui.forms.widgets.ImageHyperlink.handleActivate(ImageHyperlink.java:199)
	at org.eclipse.ui.forms.widgets.AbstractHyperlink.handleMouseUp(AbstractHyperlink.java:327)
	at org.eclipse.ui.forms.widgets.AbstractHyperlink.access$2(AbstractHyperlink.java:311)
	at org.eclipse.ui.forms.widgets.AbstractHyperlink$4.handleEvent(AbstractHyperlink.java:125)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053)
	at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4169)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3758)
	at net.gui.PageAccueil$1.run(PageAccueil.java:72)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
	at net.gui.PageAccueil.open(PageAccueil.java:63)
	at net.gui.PageAccueil.main(PageAccueil.java:52)
Et voici une partie de code de mes models Famille et medicament :
Médicament :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
  @ManyToOne(fetch = FetchType.EAGER)
	@JoinColumn(name = "famCode", nullable = false)
	public Famille getFamille() {
		return this.famille;
	}
 
	public void setFamille(Famille famille) {
		Famille oldValue = this.famille;
		this.famille = famille;
		firePropertyChange("famille", oldValue, famille);
	}
Famille :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
  @OneToMany(fetch = FetchType.LAZY, mappedBy = "famille", cascade =       { CascadeType.ALL }, orphanRemoval = true)
	public Set<Medicament> getMedicaments() {
		return this.medicaments;
	}
 
	public void setMedicaments(Set<Medicament> medicaments) {
		this.medicaments = medicaments;
	}
Et voici le code quand je modifie ma famille :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
Transaction transaction = session.beginTransaction();
                Famille maFamille = (Famille) session.get(Famille.class,
fam.getFamCode());
	       maFamille.setFamCode(textCodeFamille.getText());
	       maFamille.setFamLibelle(textLibelleFamille.getText());
		transaction.commit();
		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,