정적 hasMany grails에서 User 클래스에 정의 된 많은 자식 테이블을 가진 사용자가 있습니다.Grails GORM과 MYSQL 캐스케이드 삭제 문제
Grails에서 User.get (3) .delete()를 수행 할 때 아무런 문제가 없습니다. 해당 사용자와 모든 하위 테이블 행을 자동으로 삭제합니다. 하지만 MySQL 작업대에서 동일한 작업을 수행하려고 할 때. MySQL에서 던진 에러 :
ERROR 1451: Cannot delete or update a parent row: a foreign key constraint fails (`test_db`.`search_stat`, CONSTRAINT `FK7A3CFFB6E64DB41` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`))
SQL Statement:
DELETE FROM `test_db`.`user` WHERE `id`='3'
MySQL의 문제점은 무엇인지 알지 못합니다.
MySQL의 테이블 정의를 확인하십시오. 외래 키에 "ON DELETE CASCADE"가 설정되어 있습니까? 아니면 배후의 코드에서 GORM/Hibernate가 계단식으로 작동합니까? –
MYSQL 워크 벤치에서 Foreing Keys 탭 아래에 외부 키가 표시되지 않았는지 확인했습니다. Foreing 키 이름 및 참조 그 아래의 테이블 탭은 비어 있습니다. 공란을 클릭하면 fk_user_1이 자동으로 생성되고 다음 탭을 클릭하면 드롭 다운이 db에있는 모든 테이블을 참조 테이블로 선택합니다. 하지만 뭔가 잘못되었다고 생각하며 외래 키를 다시 만들 필요가 없습니다. 나는 그 명령을 mysql 커맨드 라인 버전에서 내가 던져 동일한 오류가 발생 삭제하려고했습니다. –
한편 Grails GORM 문서에서는 belongsTo가 자동으로 삭제/업데이트 동작에 캐스케이드를 생성한다고 말합니다. 그래서 GORM이 MySQL 데이터베이스에 테이블을 만들 때이 동작은 db 스키마로 넘어 갔어야합니다. –