J'ai 3 classes: User, UserFormGroup et FormGroup. UserFormGroup a une référence ManyToOne sur User et FormGroup. Lorsque je tente de supprimer un FormGroup, je reçois l'erreur suivante:Hibernate Impossible de supprimer ou mettre à jour une ligne parente: une contrainte de clé étrangère échoue dans OneToMany
com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot delete or update a parent row: a foreign key constraint fails (`form`.`user_form_group`, CONSTRAINT `FK_4on68h439dd6w05ikvl7vvvo5` FOREIGN KEY (`form_group_id`) REFERENCES `form_group` (`id`))
` Sur FormGroup je l'attribut suivant:
@OneToMany(targetEntity=UserFormGroup.class, cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "formGroup", orphanRemoval=true)
private Set<UserFormGroup> userFormGroups = new HashSet<>();
Sur UserFormGroup je l'attribut suivant:
@Id
@ManyToOne
@JoinColumn(referencedColumnName = "id")
private FormGroup formGroup;
Shouldphan_removal = true Supprimer remove UserFormGroup lorsque FormGroup est supprimé? Pourrait-il provenir de l'autre relation entre UserFormGroup et User? Je peux ajouter ce code si nécessaire.
EDIT
Voici comment je supprimer le FormGroup:
FormGroup group = groupRepository.findByIdAndMember(groupId, user);
if(group == null){
return new ResponseEntity<>(HttpStatus.FORBIDDEN);
}
try {
groupRepository.delete(group);
} catch(IllegalArgumentException e){
System.out.println(e.getMessage());
return ResponseEntity.status(HttpStatus.BAD_REQUEST).build();
}
SOLUTION
Je ne sais pas ce qui a fait l'affaire, mais Je pense que je devais mettre la cascade à CascadeType.REMOVE
sur chaque table référençant UserFormGroup au lieu de CascadeType.ALL
car CascadeType.ALL
inclut CascadeType.PERSIST
.
ajouter la méthode de suppression –
Je viens de l'ajouter. J'utilise un DAO qui étend CrudRepository avec Spring Data. – Servietsky