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 :
- 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 :
- @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 :
- @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 :
- 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,
Message édité par nyyko le 01-06-2013 à 12:53:27