私は3つのクラスUser、UserFormGroup、FormGroupを持っています。 UserFormGroupには、UserおよびFormGroupのManyToOne参照があります。私はFormGroupを削除しようとすると、私は次のエラーを取得:FormGroupオンHibernate親行を削除または更新できません: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`))
` を私は次の属性があります
@Id
@ManyToOne
@JoinColumn(referencedColumnName = "id")
private FormGroup formGroup;
:UserFormGroupオン
@OneToMany(targetEntity=UserFormGroup.class, cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "formGroup", orphanRemoval=true)
private Set<UserFormGroup> userFormGroups = new HashSet<>();
を私は次の属性を持っています
FormGroupが削除されたときにorphan_removal = trueを削除してUserFormGroupを削除しないでください。 UserFormGroupとUserの間の他の関係から来るのでしょうか?必要に応じてこのコードを追加することができます。
EDITここ
私は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
私はトリックをしたかわからないんだけど、私は設定する必要があったと思うCascadeType.ALL
にはCascadeType.PERSIST
が含まれているため、CascadeType.ALL
の代わりにUserFormGroupを参照していたすべてのテーブルで、CascadeType.REMOVE
にカスケードします。
削除方法を追加 –
私はそれを追加しました。私はSpring DataでCrudRepositoryを拡張するDAOを使用します。 – Servietsky