ISSUEs - JPA로 생성한 entity column에서 unique 제약조건 삭제하기

Joshua_Kim·2021년 7월 27일
3

개발ISSUES

목록 보기
2/4
post-thumbnail

🌱서론

  • 포스팅을 하고 있지만, 현재 회사에서 내가 맡고 있는 업무는 템플릿 서비스를 위한 category 알고리즘 로직을 만드는 것과, RESTful API 제작이다. 👉 (JPA 카테고리 제작 시리즈)

  • 신나게 코딩을 하고 있는데, Category Entity요구 스펙이 달라졌다.

  • code columnunique 제약조건이 있었는데, 빼달라는 요구였다.

  • 처음에는 단순히 application-jpa-mysql.yml에 있는 spring.jap.hibernate.ddl-autoupdate 로 설정되어 있기때문에 @column 만 설정해주면 될줄 알았다.

  • 근데 그게 아니었다. 두둥 🥲

🔥 ISSUE 발생

  • Category 엔티티의 code 필드는 @Column 을 통해 UNIQUE 조건이 들어가 있었다.

  • Work Bench에서 DESC category 를 통해 조회한 결과다.
  • code columnUNIQUE 제약이 달려있는걸 확인 할 수 있다.

  • 본래 첫 설계때는code 값이 유일값이라 UNIQUE 제약을 달았는데, 요구 스펙에서 최상위 codeROOT로 설계하게 되면서, 중복값이 들어가게 되었다.

🪚 첫번째 삽질

⚙️ 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 에서 제약조건을 걸게되면 indexforeign key를 통해 제약조건을 설정하기 때문에 해당 제약조건을 빼기 위해서는 해당 index foreign keydrop시켜줘야한다.
profile
인문학 하는 개발자 💻

0개의 댓글