# Hibernate ManyToMany Cascade



## java-jim (7. Mai 2010)

Hallo,
seit 2 Tagen schlage ich relativer Hibernate-Neuling mich mit folgendem Problem herum, das es ähnlich mehrfach zu finden gibt, aber alle Lösungen hauen bei mir nicht hin.

Ich erzeuge per Hibernate 3 Tabellen: Benutzer, Gruppe und Gruppenzuweisung. Ein Benutzer kann in mehreren Gruppen sein, und eine Gruppe kann mehrere Benutzer haben, also eine ManyToMany-Beziehung, aus der die Verknüpfungstabelle (Gruppenzuweisung) automatisch generiert wird. 

Hier die relevanten Codeschnipsel:

Klasse Benutzer:

```
@ManyToMany(cascade=CascadeType.ALL)
	@JoinTable(name = "gruppenzuweisung",
			joinColumns = {@JoinColumn(name="BenutzerID")},
			inverseJoinColumns = {@JoinColumn(name="GruppeID")}
	)
	private List<Gruppe> gruppen;
```

Klasse Gruppe:

```
@ManyToMany(mappedBy="gruppen")
    private List<Benutzer> benutzer;
```

Die Tabellen werden korrekt erzeugt, die Verknüpfungstabelle hat auch die 2 Fremdschlüssel. Wenn ich jetzt eine Gruppe lösche, hätte ich natürlich gerne dass die Verknüpfung in Gruppenzuweisung auch gelöscht wird (natürlich nicht der Benutzer selbst). Das funktioniert aufgrund des Constraints nicht:

java.sql.BatchUpdateException: Cannot delete or update a parent row: a foreign key constraint fails (`alpha`.`gruppenzuweisung`, CONSTRAINT `FKD87A28A8D67F1D8E` FOREIGN KEY (`GruppeID`) REFERENCES `gruppe` (`id`))

Ich benutze Hibernate3 und MySQL 5 mit InnoDB-Tabellen (Die DB selbst ist aber MyISAM. Ich weiß nicht wie ich das ändern könnte oder ob das ein Problem ist).

Ich habe irgendwo gelesen dass die cascade-Anweisung eigentlich überflüssig ist. Ohne geht's aber genauso wenig.

Falls noch weitere Infos fehlen um das Problem zu lösen, immer raus damit. Bin wie gesagt am Verzweifeln


----------



## java-jim (10. Mai 2010)

Kann mir denn niemand helfen? Vielleicht wenigstens ein paar Mutmaßungen woran es liegen KÖNNTE? Wie gesagt, wenn irgendwelche Angaben fehlen liefere ich die nach. Vielleicht hier mal meine Hibernate-Config.

```
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
   "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
   "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
   <session-factory>
      <property name="connection.url">jdbc:mysql://localhost/alpha</property>
      <property name="connection.username">root</property>
      <property name="connection.password"></property>
      <property name="connection.driver_class">
         com.mysql.jdbc.Driver
      </property>
      <property name="dialect">
		 org.hibernate.dialect.MySQLInnoDBDialect
      </property>
      <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider
	  </property>
      <property name="current_session_context_class">thread
      </property>
      <property name="hibernate.transaction.factory_class">
         org.hibernate.transaction.JDBCTransactionFactory
      </property>
      <property name="hibernate.hbm2ddl.auto">update</property>
	  
      <mapping class="de.hsbremen.alpha.server.datenbank.model.Benutzer" />
      <mapping class="de.hsbremen.alpha.server.datenbank.model.Gruppe" />
     
   </session-factory>
</hibernate-configuration>
```

Ich weiß dass es das Problem zuhauf im Netz zu finden gibt, aber die Lösung geht angeblich so wie ich es jetzt habe.


----------



## PHANTOMIAS (11. Jun 2010)

Ich habe genau das gleiche Problem, wie konntest du das lösen?

Gruss PHANTOMIAS


----------

