Hibernate Books

All times are UTC - 5 hours [ DST ]



Post new topic Reply to topic  [ 1 post ] 
Author Message
 Post subject: Löschen via manueller Query funktioniert nicht
PostPosted: Thu Sep 01, 2011 6:59 am 
Newbie

Joined: Thu Sep 01, 2011 6:41 am
Posts: 3
Hallo zusammen,

ich versuche mich gerade ein wenig in Hibernate einzuarbeiten. Bis jetzt bin ich auch schon stolz, denn das Erstellen und Löschen funktioniert soweit eigentlich ganz gut.

Allerdings gibt es da doch eine kleine Einschränkung und ich verstehe nicht, was ich da falsch mache - und hoffe auf Eure Hilfe.

Also:

Es gibt eine Klasse "Uebersetzer", diese wiederum erbt von "PersonenDaten". Das Mapping zu dieser Klasse (hier die Kurzform) sieht so aus:

Code:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
               assembly="Auftragsdatenbank_Backend"
               namespace="Auftragsdatenbank_Backend">
   <joined-subclass name="Uebersetzer" extends="PersonenDaten">
      <key column="Id"/>

                <property name="UebersetzerNummer" not-null="true"/>

      <set name="Zeitspannen" table="Zeitspannen" cascade="all-delete-orphan">
         <key column="UbersetzerId" />
         <one-to-many class="Zeitspanne"/>
      </set>

   </joined-subclass>
</hibernate-mapping>


Zur Info: Zeitspannen ist ein Objekt, dass die Zeiten des Urlaubs definiert (also von, bis, wo isser hin etc.).

Jetzt möchte ich ein Übersetzerobjekt aus der Datenbank löschen. In folgender Form - also nur zum testen - klappt das 1A:

Code:
public void LoescheUebersetzer(Uebersetzer uebersetzer, ISession _session)
        {
  _session.Delete(uebersetzer);
        }


Wenn ich diesen Code aufrufe, dann werden wie erwartet ebenfalls alle "Zeitspannen" mit gelöscht. Das macht ja auch Sinn, denn eine Zeitspanne ist immer an einen Übersetzer gebunden.

Jetzt kommt mein Problem: ich möchte eine Query erstellen, die genau den Übersetzer mit der gewünschten Übersetzernummer löscht. (Info: die Übersetzernummer ist wird manuell vergeben, ist also nicht die Id, trotzdem eindeutig).
Auch hier ein Code-Schnipsel:

Code:
       
public void LoescheUebersetzer(String uebersetzernummer,ISession _session)
        {
            var hql = @"delete from Uebersetzer u where u.UebersetzerNummer=:unummer";
            _session.CreateQuery(hql).SetString("unummer", uebersetzernummer).ExecuteUpdate();
        }


Das wiederum funktioniert aber ganz und gar nicht, scheinbar ignoriert er hier was er mit den ganzen 1:N Beziehungen machen soll. Hier die Fehlermeldung:

Quote:
ERROR Could not execute command: DELETE FROM Uebersetzer WHERE (Id) IN (select Id from #Uebersetzer)
System.Data.SqlClient.SqlException: Die DELETE-Anweisung steht in Konflikt mit der REFERENCE-Einschränkung 'FKEAD6ADDC5C21557C'. Der Konflikt trat in der 'auftrag'-Datenbank, Tabelle 'dbo.Zeitspanne', column 'UbersetzerId' auf.
Die Anweisung wurde beendet.


Jetzt kommt DIE Frage: wieso funktioniert das Löschen in diesem Fall nicht UND wie kann ich es beheben :) ?

Ich danke Euch schon einmal für Eure Einfälle, Tipps und Tricks.

LG
DataDummy


Top
 Profile  
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 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.