[Hibernate] Problème modification clé prim/étrangère (Cascade)

Fermé
nyyko Messages postés 7 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 4 décembre 2013 - 1 juin 2013 à 13:01
nyyko Messages postés 7 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 4 décembre 2013 - 2 juin 2013 à 12:20
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 :

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 :
@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 :
@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 :
	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 en cascade mais je ne sais pas comment résoudre le problème, c'est pour cela que je viens vers vous.

Merci d'avance,
A voir également:

1 réponse

nyyko Messages postés 7 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 4 décembre 2013
2 juin 2013 à 12:20
up !
0