Hi
Mein Problem ist, mein Benutzer hat ein Set<FahrzeugBean> und wenn ich ein neues Fahrzeug hinzufüge -> den Benutzer speichere und dann doch gleich das Fahrzeug wieder löschen möchte funktioniert die
benutzer.getFahrzeuge().remove(neuesFZ);
Methode des java.util.Set nicht! Ich muss erst den Benutzer neu laden
benutzerDatenBean.get(id); und kann dann erst benutzer.getFahrzeuge().remove(neuesFZ);
ausführen.
Ich benutze:
Tomcat 5.5.9
Java Server Faces 1.1 / MyFaces 0.9
JDK 1.5.0_05
Hibernate 3.0.6
HibernateSyncronizer3.1.1
Eclipse 3.1
MySQL 4.1.0
Meine ManagedBean ist prinzipiell so auf gebaut.
class AVManagerBean ( JSF scope session )
enthält:
private BenutzerDatenBean benutzer;
der Benutzer enthält:
private Set<FahrzeugBean> fahrzeuge = new HashSet();
Ausführung gekürzt:
Code:
benutzerDatenBean.getFahrzeuge().add(neuesFZ);
BenutzerDatenBeanDAO dao = new BenutzerDatenBeanDAO();
// HibernateSyncronizer DAO
Code:
dao.saveOrUpdate(benutzerDatenBean);
// Hibernate erledigt alles inkl. Der Vergabe der ID
und dann falls der User es sich anders überlegt gleich wieder
Code:
fz = getFahrzeugFromBenutzerSet(neuesFZ.getId());
Code:
public FahrzeugBean getFahrzeugFromBenutzerSet(long id) {
FahrzeugBean tempFZ = null;
// Holt das FZ aus den Set des Benutzers leider liniare suche
Iterator<FahrzeugBean> iter = benutzerDatenBean.getFahrzeuge().iterator();
while(iter.hasNext()) {
tempFZ = iter.next();
if (tempFZ.getId() == id) {
break;
}
}
return tempFZ;
}// public FahrzeugBean getFahrzeugFromBenutzerSet(long id)
Code:
benutzerDatenBean.getFahrzeuge().remove(fz);
Warum funktioniert die remove() nicht?
Hibernate hat doch die Id vergeben und es müsste doch das gleiche Objekt sein!
Wie können sie sich noch unterscheiden? Es muss doch einen unterschied geben sonst würde die remove() doch funktionieren oder?
Hier noch ein teil des bhm.xml
<!-- Beziehungen -->
<set name="fahrzeuge" inverse="true" lazy="false" cascade="all-delete-orphan" >
<meta attribute="field-description">
@hibernate.set
inverse="true"
lasy="false"
cascade="all"
@hibernate.collection-key
column="kundennr"
@hibernate.collection-one-to-many
class="de.optimum24.av.app.FahrzeugBean"
</meta>
<key column="kundennr" on-delete="cascade"/>
<one-to-many class="de.optimum24.av.app.FahrzeugBean"/>
</set>
[/code]