Hallo zusammen,
ich bin gerade an meinem ersten Hibernate-Projekt. Soweit bin ich begeistert. Aber jetzt stehe ich vor einem Problem, für das ich einfach keine Lösung finde.
Ich verwende Hibernate3 mit Annotations.
Ich habe zwei Entitäten Element und Event.
Code:
@Entity
public class Element extends Base {
@GeneratedValue
private String name;
@OneToMany(mappedBy = "element", fetch = FetchType.EAGER, cascade = { CascadeType.ALL })
@JoinColumn(name = "element")
private List<Event> events;
Code:
@Entity
@Embeddable
public class Event extends Base {
@GeneratedValue
private String room;
@ManyToOne(cascade = { CascadeType.ALL })
@JoinColumn(name = "element")
private Element element;
Die Ids habe ich in der Base-Klasse untergebracht:
Code:
@MappedSuperclass
public class Base {
@Id
@GeneratedValue
protected Integer id;
protected Date changedat;
Soweit funktioniert auch alles. Wenn ich ein Element lade, enthält die List<Event> auch alle dazugehörigen Events. Wenn ich aber in einem geladenen Element aus der List<Event> einen Eintrag lösche und das Element wieder speichere (entityManager.persist) dann wird die Liste der Events in der Datenbank nicht aktualisiert. Ich hätte erwartet, dass dann das im geladenen Element entfernte Event in der Datenbank gelöscht wird...?!
Das ausgegebene SQL berichtet von einem update auf die Tabelle Element, aber eben kein Versuch in der Tabelle Event etwas zu löschen...
Hab ich etwas übersehen, oder funktioniert das so grundsätzlich nicht?
Ich hab mich schon blöd gesucht und tausend verschiedene cascade-Varianten ausprobiert.
Für jegliche Hinweise wäre ich dankbar!
Viele Grüße
Tim