-->
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.  [ 5 posts ] 
Author Message
 Post subject: Unidirectionales One-To-Many mapping
PostPosted: Mon Mar 17, 2008 2:14 pm 
Newbie

Joined: Mon Mar 17, 2008 1:49 pm
Posts: 3
Hibernate version: 3.2.6
Hi :-),

ich versuche jetzt schon seit mehreren Stunden ein völlig simples Beispiel mit Hibernate hinzubekommen und komme einfach nicht weiter. Es geht um ein unidirectionales One-To-Many-Mapping mit den folgenden 2 Klassen:

Code:
@Entity
public class Abteilung {
    @Id
    private String abtName;
...
}


Code:
@Entity
public class Mitarbeiter{
    @Id
    private int personalNr;

    @ManyToOne
    private Abteilung abteilung;
...
}



Alles was ich möchte ist, dass wenn eine Abteilung gelöscht wird, das entsprechende Attribut "abteilung" bei jedem Mitarbeiter, der diese Abteilung referenziert, in der Datenbank auf "null" gesetzt wird. Normalerweise (also mit JDBC und von Hand die Tabellen erstellen) macht man das mit einem entsprechenden Cascade, aber in Hibernate scheint es keinen derartigen Cascade-Type zu geben.

Wie kann man ein solche Problem mit Hibernate lösen? Ich würde mich über alle Tipps freuen :-).

Viele Grüße und Danke,

Finity


Top
 Profile  
 
 Post subject:
PostPosted: Tue Mar 18, 2008 8:32 am 
Expert
Expert

Joined: Thu Jul 05, 2007 9:38 am
Posts: 287
Cascade und Delete_Orphan sind die Stichworte, nach denen du suchen musst.

_________________
Please rate useful posts.


Schauderhaft: Softwaredevelopment, Projectmanagement, Qualitymanagement and all things "schauderhaft"


Top
 Profile  
 
 Post subject:
PostPosted: Tue Mar 18, 2008 9:23 am 
Newbie

Joined: Mon Mar 17, 2008 1:49 pm
Posts: 3
Danke erst mal für deine Antwort. Jedoch bin ich mir nicht so ganz sicher, ob ich sie richtig verstehe: cascades kann man wohl, so wie ich das in der Doku gelesen habe, nur für bidirektionale Assoziationen verwenden. Ich habe aber eine unidirektionale Verbindung zwischen den beiden Klassen.

Jetzt könnte ich natürlich aus meiner unidirektionalen Assoziation eine bidirektionale machen, aber das kann ja nicht ganz die Lösung des Problems sein: eine bidirektionale Assoziation verbraucht mehr Speicher und ist auch schwerer zu warten (man muss schließlich immer auf beide Seiten acht geben).

Und selbst wenn ich die Assoziation bidrektional machen würde: so wie ich das auf der Hibernate-Seite verstanden habe, kann ich mit "delete-orphan" nur eine Löschweitergabe einbauen. Aber gerade die möchte ich ja nicht: wenn eine Abteilung gelöscht wird, sollen ja nicht alle Mitarbeiter gelöscht werden. Stattdessen soll einfach das Feld "abteilung" der entsprechenden Mitarbeiter auf den Wert "null" gesetzt werden. Ganz so, wie es eben mit reinem SQL gehen würde.

Geht das überhaupt mit Hibernate?

Ich denke, ich habe mich vielleicht einfach etwas mißverständlich ausgedrückt. Hoffe, es ist jetzt etwas klarer, was ich gemeint habe.

Ich würde mich über alle Antworten freuen.

Viele Grüße,

Finity


Top
 Profile  
 
 Post subject:
PostPosted: Tue Mar 18, 2008 10:12 am 
Expert
Expert

Joined: Thu Jul 05, 2007 9:38 am
Posts: 287
Sorry, hab deine Frage nicht korrekt gelesen.

Cascade geht nicht nur bei Bidirektionalen Beziehungen, sondern auch bei unidirektionalen.

Aber du hast recht delete orphan ist natürlich genau das falsche.


Es liegt in deiner Verantwortung alle Referenzen auf ein zu löschendes Objekt auf null zu setzen. Ein entsprechendes Cascade gibt es nicht.

Jens

_________________
Please rate useful posts.


Schauderhaft: Softwaredevelopment, Projectmanagement, Qualitymanagement and all things "schauderhaft"


Top
 Profile  
 
 Post subject:
PostPosted: Wed Mar 19, 2008 7:32 am 
Newbie

Joined: Mon Mar 17, 2008 1:49 pm
Posts: 3
Hallo und danke für deine Antwort :-). Schade, dass man das mit der "null Cascade" von Hand implementieren muss: das wird vermutlich ganz schön aufwändig, wenn es sich um viele Objekte handelt.


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 5 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.