-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 3 posts ] 
Author Message
 Post subject: OneToMany List wird nicht aktualisiert
PostPosted: Thu Nov 06, 2008 9:17 pm 
Newbie

Joined: Thu Nov 06, 2008 8:56 pm
Posts: 2
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


Top
 Profile  
 
 Post subject: OneToMany List wird nicht aktualisiert
PostPosted: Fri Nov 07, 2008 5:01 am 
Newbie

Joined: Fri Nov 07, 2008 4:15 am
Posts: 1
Location: Trondheim / Norway
Vielleicht hilft das:

http://www.hibernate.org/116.html#A18

Gruessle

Søren


Top
 Profile  
 
 Post subject:
PostPosted: Fri Nov 07, 2008 10:39 am 
Newbie

Joined: Thu Nov 06, 2008 8:56 pm
Posts: 2
Danke für deinen Hinweis, Søren.
Nach etwas weiterem Forschen habe ich den Fehler gefunden. Das mit dem delete_orphan hatte ich schon ausprobiert. Allerdings hat Hibernate dann immer gleich alle Events des Elements und das Element selbst gelöscht. Der Grund war wohl, dass das Cascade auf dem Element in der Event-Klasse falsch war. Wenn hier Cascade.ALL gesetzt wird löscht er beim Löschen eines Event wohl auch das entsprechende Element, was wiederum zur Folge hat, dass alle Events zu dem Element gelöscht werden... Also habe ich das Cascade einfach weggelassen.

Jetzt sieht das also so aus:

Code:
@Entity
public class Element extends Base {
    @GeneratedValue
    private String name;
    @OneToMany(mappedBy = "element", fetch = FetchType.EAGER, cascade = { CascadeType.PERSIST, CascadeType.MERGE })
    @Cascade( { org.hibernate.annotations.CascadeType.SAVE_UPDATE, org.hibernate.annotations.CascadeType.DELETE_ORPHAN })
    @JoinColumn(name = "element")
    private List<Event> events;


Code:
@Entity
@Embeddable
public class Event extends Base {
    @GeneratedValue
    private String room;
    @ManyToOne
    @JoinColumn(name = "element")
    private Element element;


Viele Grüße
Tim


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 3 posts ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.