포스팅을 하고 있지만, 현재 회사에서 내가 맡고 있는 업무는 템플릿 서비스를 위한 category
알고리즘 로직을 만드는 것과, RESTful API
제작이다. 👉 (JPA 카테고리 제작 시리즈)
신나게 코딩을 하고 있는데, Category Entity
요구 스펙이 달라졌다.
code
column
이 unique
제약조건이 있었는데, 빼달라는 요구였다.
처음에는 단순히 application-jpa-mysql.yml
에 있는 spring.jap.hibernate.ddl-auto
가 update
로 설정되어 있기때문에 @column
만 설정해주면 될줄 알았다.
Category
엔티티의code
필드는@Column
을 통해UNIQUE
조건이 들어가 있었다.
Work Bench
에서DESC category
를 통해 조회한 결과다.code
column
에UNIQUE
제약이 달려있는걸 확인 할 수 있다.
- 본래 첫 설계때는
code
값이 유일값이라UNIQUE
제약을 달았는데, 요구 스펙에서 최상위code
를ROOT
로 설계하게 되면서, 중복값이 들어가게 되었다.
UNIQUE
제약조건을 @Column
에서 조작 해보기
- 단순하게 생각했다.
^오^hibernate.ddl-auto
설정이update
로 되어있어서,spring
서버를 다시 올리면jpa
가 알아서UNIQUE
설정도 없애줄줄 알았다.
- 💻
JPA
: 응 안돼 ^^
🧑🦲나란놈
: 그러면unique = false
로 해보면 되겠지 ^^?
🧑🦲나란놈
:^^??
- 💻
JPA
: 응 안돼 ^^
😨나란놈
: ... 왜...?
Work Bench
에서 직접 sql
날려서 UNIQUE
제약 조건 없애기
ALTER TABLE 테이블명 DROP CONSTRAINT [제약조건 이름]
UK_acatplu22q5d1andql2jbvjy7
은 제약조건이름이 아니었다. 대체 너 뭐야?
- 노란 박스의 저놈을 유심히 보다가
Work Bench
에서Indexes
를 열어보았더니
- 너 였구나? 😆
DROP INDEX [인덱스 foreign key] on [table명];
- 살포시 눌러줬다.
- 드디어
code
에 걸려있었던UNIQUE
제약조건이 사라졌다.
insert
문인가
- 오늘도 하나의
issue
를 발생시키고, 해결했다.
jpa
를 통해 unique
제약조건이 어떤식으로 걸리는지 알아서 더 기쁘다. jpa
에서 제약조건을 걸게되면 index
와 foreign key
를 통해 제약조건을 설정하기 때문에 해당 제약조건을 빼기 위해서는 해당 index foreign key
를 drop
시켜줘야한다.