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 :
Et voici une partie de code de mes models Famille et medicament :
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)
Médicament :
Famille :
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); }
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
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; }
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,
Partager