Hibernateproblem beim kaskadierenden Löschen

Manuel Hegemann

Erfahrenes Mitglied
Hallo zusammen,

ich habe Kategorien, denen gewisse Items zugeordnet sind. Es soll möglich sein Kategorien zu löschen, denen noch Items zugewiesen sind, die entsprechenden Items sollen dann automatisch auch gelöscht werden. Leider bekomme ich allerdings beim Löschen einer solchen Kategorie immer eine Exception, die mir sagt, dass genau das nicht zugelassen ist.

Hier die Exception:
DELETE on table 'T_CATEGORIES' caused a violation of foreign key constraint 'FK389D1D05E8D9000E' for key (2809E800-7727-11DC-A800-B696F4D1EDC7). The statement has been rolled back.
Exception in thread "AWT-EventQueue-0" org.hibernate.HibernateException: A Hibernate Exception occured while deleting category (deleteCategory())

Und nun meine Hibernate-Config:
Code:
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping package="de.filstaco.dad.stoman.dataobjects"> 
	<class name="Categories" table="T_CATEGORIES"> 
		<id name="id" column="id" type="java.lang.String"/>
		<property name="headcatid" column="headcatid" type="java.lang.String" />
		<property name="name" column="name" type="java.lang.String" />
		<set name="Issues" inverse="true" cascade="all-delete-orphan">
				<key column="catid"/>
			    <one-to-many class="Issues"/>
		</set>
	</class>
	<class name="Issues" table="T_ISSUES"> 
		<id name="id" column="id" type="java.lang.String"/>
		<property name="catid" column="catid" type="java.lang.String" />
		<property name="name" column="name" type="java.lang.String" />
		<property name="purchaseprice" column="purchaseprice" type="java.lang.String" />
		<property name="sellingprice" column="sellingprice" type="java.lang.String" />
		<property name="rentalprice" column="rentalprice" type="java.lang.String" />
		<property name="quantity" column="quantity" type="int" />
		<property name="notice" column="notice" type="java.lang.String" />
	</class>
</hibernate-mapping>

Was mache ich falsch? Kann mir jmd. helfen? Wäre super!

Vielen Dank im Voraus.

Viele Grüße,
BigManu
 
Ein Blick hierauf http://www.hibernate.org/hib_docs/reference/en/html/objectstate.html#objectstate-transitive
sagt mir, dass 'all-delete-orphan' wohl durch 'all,delete-orphan' ersetzt werden sollte.

Außerdem (Zitat aus der Doku):
"We recommend that for systems where delete performance is important, all keys should be defined on-delete="cascade", and Hibernate will use a database-level ON CASCADE DELETE constraint, instead of many individual DELETE statements. Be aware that this feature bypasses Hibernate's usual optimistic locking strategy for versioned data."

Gruß, Basti
 
Hallo, erstmal danke für die Antwort.

cascade="all,delete-orphan" brachte leider keine Lösung, dein anderer Hinweis jedoch war super.

Man muss das set einfach mit inverse="true" deklarieren und die key-column als on-delete="cascade".

Viele Grüße,
BigManu
 

Neue Beiträge

Zurück