Gorm 에서 constraint로 OnDelete 설정이 안될 때

2022. 10. 29. 21:05Tutorial & Training

728x90

Go언어 에서 많은 ORM이 있지만, 여러가지 써보아도 결국 GORM으로 회귀하게 됩니다.

매우 많은 기능과 이미 많이 쌓인 커뮤니티 그리고 사용이 쉽기 때문이죠.

 

 

그런데 제약사항 설정 중 on delete CASCADE를 설정한다던가 SET NULL 을 넣는다 등을 Auto Migrate 과정에서 진행하고 싶을 수 도 있습니다. 당연히 ORM 코드상에서 명시하여 DB에 자동설정이 되어야 orm을 쓰는 의미가 있기도 하구요.

Node.js의 대부분 ORM들은 물리적 db에 이과정을 진행하지 않는 경우가 많긴 하지만요.

 

 

하지만 foreignKey에 constraint를 넣어도 물리 DB상에서는 constraint로 on delete on update가 적용되지 않는 현상이 있습니다.

이럴 경우 GORM에서는 이를 검증하지만 실제 Table에서는 CASCADE가 실제로 설정되지 않았기 때문에 오류가 발생합니다.

 

 

 

 

위 와 같은 현상이 발생한 가장 큰 이유는 GORM의 명시 선언의 우선순위가 문제가 됩니다.

https://github.com/go-gorm/gorm/issues/4289#issuecomment-943366275

 

MySQL Migration - OnUpdate / OnDelete CASCADE not being applied to schema · Issue #4289 · go-gorm/gorm

Hi! Firstly, thanks for a great library, it is really intuitive and the documentation is excellent. However, I am having difficulty understanding why a constraint I am adding to my foreign keys is ...

github.com

위 댓글 내용 처럼 호출하는 부모 모델상에서 constraint를 걸어주고 실제 Table에서 확인을 해보면 적용이 되는 것을 볼 수 있습니다.

 

728x90