Bonjour,

Lors de l'exécution d'une suite de tests automatiques, chacun de mes tests commence par une suppression de tous les objets (méthode deleteAll qui supprime d'abord toutes les instances d'entités, classe par classe, puis se termine par la suppression d'un arbre de folders: le remove se propage en cascade (CascadeType.REMOVE) de la racine vers les fils).
Le premier deleteAll fonctionne bien.
Au 2eme deleteAll, j'ai systématiquement l'erreur suivante sur la suppression du folder racine:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
Caused by: com.mysql.jdbc.exceptions.MySQLIntegrityConstraintViolationException: Cannot delete or update a parent row: a foreign key constraint fails (`opdm/folder`, CONSTRAINT `FK7DC2088E52075A1A` FOREIGN KEY (`parent_id`) REFERENCES `folder` (`id`))
Si j'exécute le deleteAll seul (le même code, exécuté depuis un autre test unitaire, donc depuis une nouvelle JVM), juste après avoir eu l'erreur, celà fonctionne.
J'imagine que l'erreur est liée au fonctionnement de l'EntityManager (configuré via Spring), mais je coince.

Quelqu'un a-t-il une piste ?

Voici mon entité Folder (Persistable est une classe générique contenant les champs id et version):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
@Entity
public class Folder extends Persistable {
 
	private static final long serialVersionUID = -3351025698625005441L;
 
	private String name;
	private Collection<Folder> children;
	private Folder parent;
 
 
	public String getName() {
		return name;
	}
 
	public void setName(String name) {
		this.name = name;
	}
 
	@OneToMany(cascade=CascadeType.REMOVE, fetch=FetchType.LAZY, mappedBy="parent")
	public Collection<Folder> getChildren() {
		return children;
	}
 
	public void setChildren(Collection<Folder> children) {
		this.children = children;
	}
 
	@ManyToOne(fetch=FetchType.LAZY)
	public Folder getParent() {
		return parent;
	}
 
	public void setParent(Folder parent) {
		this.parent = parent;
	}
 
	public Folder()
	{
	}
et mon fichier de configuration de Spring:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
	<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
		<property name="dataSource" ref="dataSource" />
		<property name="jpaVendorAdapter">
			<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
				<!-- 
				-->
					<property name="showSql" value="true" />
				<property name="databasePlatform" value="org.hibernate.dialect.MySQLInnoDBDialect" />
				<property name="generateDdl" value="true" />
			</bean>
		</property>
		<property name="loadTimeWeaver">
			<bean class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver" />
		</property>
	</bean>
 
	<!-- la source de donnéees DBCP -->
	<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
		<property name="driverClassName" value="org.gjt.mm.mysql.Driver" />
		<property name="url" value="jdbc:mysql://localhost/monprojet" />
		<property name="username" value="guest" />
		<property name="password" value="guest" />
	</bean>
 
	<!-- le gestionnaire de transactions -->
	<tx:annotation-driven transaction-manager="txManager" />
	<bean id="txManager" class="org.springframework.orm.jpa.JpaTransactionManager">
		<property name="entityManagerFactory" ref="entityManagerFactory" />
	</bean>
 
	<!-- traduction des exceptions -->
	<bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor" />
 
	<!-- persistence -->
	<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />
Merci d'avance