-->
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.  [ 1 post ] 
Author Message
 Post subject: Löschen mit HQL
PostPosted: Thu Jun 25, 2009 8:46 am 
Newbie

Joined: Thu Jun 25, 2009 8:30 am
Posts: 2
Hallo,

ich habe eine Frage zum Löschen mehrerer Objekte mit HQL.

Zum Problem: Ich habe schematisch die folgende Struktur vorliegen:
- Klasse A hat eine bidirektionale 1:N Beziehung zur Klasse B
- Klasse B hat eine bidirektionale 1:N Beziehung zur Klasse C
- Klasse C hat sonst keine weiteren Beziehungen

Sieht also als angedeutetes Klassendiagramm wie folgt aus: A <-1---*-> B <-1---*-> C
Man könnte sich das ganze auch als Baumstruktur vorstellen, wobei ein A-Objekt die Wurzel des Baumes darstellt, eine Menge von B-Objekten die Baumknoten auf Ebene 1 und eine Menge von C-Objekten die Baumknoten der Ebene 2.

Meine Frage ist nun: Wie gehe ich am Besten vor, wenn ich ein A-Objekt und dann auch direkt alle daran hängenden B-Objekte und auch die daran hängenden C-Objekte löschen will?

Ich habe es mal so versucht, dass ich die jeweiligen Beziehungen mit @Cascade(CascadeType.DELETE) annotiert und dann das gewünschte A-Objekt gelöscht habe. Das brachte auch das gewünschte Resultat, war aber bei vielen Objekten ziemlich lahm.

Dann hab ich es mit HQL-Queries versucht. Dabei habe ich zu erst alle betreffenden C-Objekte gelöscht, danach die betreffenden B-Objekte und zum Schluss das gewünschte A-Objekt. Die von mir verwendeten Queries sehen wiefolgt aus:

Code:
delete from C c where c.b.id in (select b.id from B b where b.a = :a)
delete from B b where b.a = :a


Das gewünschte A hab ich dann mit session.delete() gelöscht. Das geht deutlich flotter als mit @Cascade(CascadeType.DELETE). Weiß jemand, ob das noch besser geht? Zum Beispiel ohne ein Unter-Select? Bin dankbar für jede Anregung, da ich solche Sachen noch in keiner Hibernate-Literatur gefunden habe.


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

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.