Hibernate Delete Problem

A

alaska94

Hallo,

ich bin in einem Projekt eingesetzt wo Hibernate eingesetzt wird. Leider habe ich da keine Plan von und nicht wirklich Zeit mich dort einzuarbeiten. Ich habe jetzt ein großes Problem, unzwar habe ich folgende XML Structur:
XML:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>

<class name="com.gt.policyrepository.objects.PRRole" table="PRROLE" >
<cache usage="nonstrict-read-write" />

<id name="id" column="ID">
<generator class="sequence">
<param name="sequence">prrole_id_sequence</param>
</generator>
</id>
<property name="name" not-null="true" />
<property name="description" not-null="false" />

<many-to-one name="mandant" column="mandant_id" not-null="false"
cascade="none"/>

<set name="parentRoles" table="ROLEROLE" cascade="all">
<cache usage="nonstrict-read-write" />
<key column="child_id" not-null="true" />
<many-to-many column="parent_id"
class="com.gt.policyrepository.objects.PRRole" />
</set>

</class>

Wie ihr seht, gibt es hier eine Tabelle mit Kindern und Eltern, also das heißt eine Rolle A kann von einer Rolle B erteben und eine ROlle B kann von A erben.

XML:
<set name="parentRoles" table="ROLEROLE" cascade="all">
<cache usage="nonstrict-read-write" />
<key column="child_id" not-null="true" />
<many-to-many column="parent_id"
class="com.gt.policyrepository.objects.PRRole" />
</set>

Für die Tabelle ROLEROLE wurde keien KLasse definiert.

Jetzt will ich. wenn ich eine PRRole lösche in der Tabelle ROLEROLE voher alle verknüpfungen zu dieser Rolle gelöscht werden. Also Beispiel:

Rolle A erbt von B
Rolle C erbt von A

Dann möchte ich aRolle A löschen, dass heißt ich muss in der Tabelle ROLEROLE ja die Verbindungen löschen wo das child A ist und wo das parent object a ist.

Dies habe ich mit folgender Abfrage versucht.

Code:
Delete from PRRole.parentRoles where PRRole.parentRoles.child_id = :id or PRRole.parentRoles.parent_id = :id;

Ich bekomme die Fehlermeldung, dass parentRoles nicht gemappt ist, was ich auch verstehe weil dafür keine Klasse existiert.
Und mit Sets kenne ich mich nicht auf.

Wer könnte mir eine Abfrage bauen die mein Problem löst

Gruß

Alaska
 
Zuletzt bearbeitet von einem Moderator:
"Delete from PRRole.parentRoles" ist erstmal grundsätzlich falsch. In SQL löscht du ja auch aus einer Tabelle, nicht aus einer Spalte. D.h. es müsste zumindest "Delete from PRRole" heißen... Im Übrigen finde ich es komisch, dass deine Properties _id heißen, wenn dann aber doch die referenzierte Entität darin steht und nicht die ID.

Merke: du modellierst Objekte, keine Datenbank mit Hibernate/JPA.

REINHAUN!
 
So hat sich schon erledigt ich habe einfahc

String sql = "Delete from ROLEROLE where ROLEROLE.child_id = :id or ROLEROLE.parent_id = :id";
Query query = getCurrentSession().createSQLQuery(sql);

gemacht musste statt createQuery
createSQLQuery schreiben

Gruß
 

Neue Beiträge

Zurück