Hibernate: Probleme beim Löschen eines Objektes welches ein Set als Datenelement hat

Flo<H>

Erfahrenes Mitglied
Hallo!
Ich experimentiere gerade ein wenig mit Hibernate und bin auf ein Problem gestoßen welches ich noch nicht wirklich lösen konnte. Vielleicht ist das Ganze auch ganz normal, dann würde mich aber das Wieso interessieren :)

Also ich habe zwei Klassen:
Java:
public class Player implements Comparable<Player>
{	
	private Long id;
	
	private String name;

	private int age;
	
	private String position;

       // ...
}

Java:
public class Team
{
	private Long id;
	
	private String name;
	
	private Set<Player> players = new TreeSet<Player>();

        // ...
}

Team.hbm.xml
Code:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class
        name="Team"
        table="TEAM">
        <id
            name="id"
            column="TEAM_ID">
            <generator class="increment"/>
        </id>
        <property
            name="name"
            column="TEAM_NAME"/>
            
        <set name="players" table="PLAYER" cascade="all, delete-orphan">
            <key column="TEAM_ID" />
            <one-to-many class="Player" />
        </set>
    </class>
</hibernate-mapping>

Player.hbm.xml
Code:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class
        name="Player"
        table="PLAYER">
        
        <id
            name="id"
            column="PLAYER_ID">
            <generator class="increment"/>
        </id>
        <property
            name="name"
            column="PLAYER_NAME"/>
        <property
            name="age"
            column="PLAYER_AGE"/>
        <property
            name="position"
            column="PLAYER_POSITION"/>

    </class>
</hibernate-mapping>
Team besitzt wie man sieht ein Set in welchem Objekte der Klasse Player gespeichert sind.
Ein Team erstellen, Player hinzufügen und das ganze in der Datenbank speichern lassen funktioniert ohne Probleme. Das Herausholen und Verändern geht ebenfalls.

Mein Problem ist das Löschen eines Teams mitsamt den Spielern von diesem Team.
Mein erster Versuch war:
Java:
// [...] Session öffnen
session.createQuery("delete from Team t where t.name='"+teamName+"'").executeUpdate();
Dabei wurde aber nur das Team gelöscht, aber nicht die Player die in diesem Team waren.

Wenn ich aber jetzt zuerst das Team-Objekt per HQL-Select raushole und anschließend lösche werden auch die Player-Objekte in der Datenbank richtig gelöscht.

Mich würde jetzt interessieren warum das so ist und ob das normal ist oder ob ich irgendwo einen Fehler drin habe.
mfg flo
 
Sers!

Wenn du mit Hibernate eine Klasse mit session.delete(obj) löscht, sorgt Hibernate automatisch auch dafür, dass alle gespeicherten Objekte, die im <one-to-one> Verhältnis zu deinem zu löschenden Objekt stehen mitgelöscht werden. Sofern die hbm.xml-Dateien richtig konfiguriert sind.

Nun vermute ich mal, dass das löschen per createQuery diese Relationships einfach nicht berücksichtigt. Im Grunde so, als ob ich die Objekte "per Hand" mit einer DB-Visualisierungssoftware löschen würde.
 

Neue Beiträge

Zurück