Je rencontre un problème de contrainte lorsque j'essaie de supprimer un objet contenant une relation OneToMany qui ne devrait pas se produire. J'ai mis cascade = CascadeType.ALL
, essayé d'ajouter l'annotation spécifique à Hibernate @Cascade
, j'ai essayé de reconstruire une nouvelle base de données, et j'ai même créé l'exemple minimal ci-dessous qui échoue.La cascade ne fonctionne pas lors de la suppression avec les référentiels JPA Spring Data
Cannot delete or update a parent row: a foreign key constraint fails (`test-db`.`bar`, CONSTRAINT `FKdvoqij212wwl2bf14kwo55h55` FOREIGN KEY (`foo_id`) REFERENCES `foo` (`id`))
objet à cascade
@Entity
public class Bar {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
@ManyToOne
private Foo foo;
// Constructor, getters and setters omitted
}
classe contenant en cascade
@Entity
public class Foo {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
@OneToMany(mappedBy = "foo", cascade = CascadeType.ALL, orphanRemoval = true)
private List<Bar> bars;
// Constructor, getters and setters omitted
}
Test:
// Spring Data JPA Repositories (extend CrudRepository)
@Autowired private FooRepository fooRepository;
@Autowired private BarRepository barRepository;
@Test
public void test() {
final Foo foo = new Foo();
fooRepository.save(foo);
final Bar bar = new Bar();
bar.setFoo(foo);
barRepository.save(bar);
fooRepository.delete(foo);
}
Ce test échoue ci-dessus. Je m'attendais à pouvoir supprimer Foo sans avoir à supprimer tous les objets Bar associés car la cascade était définie sur la relation OneToMany. Pourquoi est-ce échouer?
ont toujours la même erreur avec 'orphanRemoval'. –
essayez également 'foo.getBars(). Add (bar)' dans vos tests pour vous assurer que la relation bidirectionnelle est correctement établie. – Sergio
Cela l'a réparé. Est-ce que cela signifie que je dois ajouter les associations aux deux objets pour maintenir une relation bidirectionnelle? Je me suis dit que si j'ajoutais l'objet 'Foo' à l'objet' Bar', cela créerait automatiquement une relation bidirectionnelle. –