
포스팅을 하고 있지만, 현재 회사에서 내가 맡고 있는 업무는 템플릿 서비스를 위한 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를 통해 조회한 결과다.codecolumn에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시켜줘야한다.