• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

기본키 수정

22.11.30 17:16 작성 조회수 195

0

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.

1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

[질문 내용]
게시판을 만들다가 궁금한 점이 생겨서 질문드립니다. 게시판에서 게시물을 삭제하면 그에 맞게 글 번호가 연속된 오름차순으로 재정렬되게 하는 것이 목적입니다.

저는 일단 view에서 페이징 정보를 이용해서 페이지마다 계산해서 제가 구현하고자 하는 기능을 만들기는 했습니다.

하지만 이를 db pk 값을 이용해서 구현할 수도 있을 거라 생각이 들었습니다. db의 pk값을 그대로 view에 뿌리고 게시물을 삭제하면 그에 따라 삭제된 게시물의 pk값 보다 큰 게시물의 pk를 1씩 감소하게 말입니다. 1씩 감소시키는 것은 서비스 로직에서 변경감지 기능을 사용했습니다. pk값을 다루는 거라 뭔가 위험하다는 생각은 들었으나 기술적인 부분에 집중하고자 했습니다.

하지만 에러가 났고 저는 에러가 난 이유는 db의 외래키 제약조건이 on update restrict로 설정이 되어있다고 판단했습니다. 따라서 mysql에서 해당하는 테이블의 외래키 제약조건을 on update cascade로 수정을 해서 다시 실행해봤지만 그래도 여전히 에러가 났습니다. 구글링을 통해 알아봤는데 단순히 JPA에서는 기본키를 변경하는 것을 허용하지 않는다. 필요하다면 mybatis나 jdbctemplate을 써라정도만 나와있습니다. 여기서 제가 궁금한점은

  1. 저는 직접 mysql에서 외래키 제약 조건을 수정했는데 jpa에서 쿼리를 날려서 외래키 제약 조건을 수정하는게 가능한가요?

  2. 다른 db접근 기술과 달리 jpa에서 기본키를 변경을 못하는 이유가 뭔지 알 수 있을까요? 그냥 JPA에서 무턱대고 막아둔게 아니라면 그 이유가 궁금합니다.

 

 

 

 

답변 1

답변을 작성해보세요.

0

y2gcoder님의 프로필

y2gcoder

2022.12.01

안녕하세요. 흥흐음님, 공식 서포터즈 y2gcoder입니다.

1. 저는 직접 mysql에서 외래키 제약 조건을 수정했는데 jpa에서 쿼리를 날려서 외래키 제약 조건을 수정하는게 가능한가요?

2.다른 db접근 기술과 달리 jpa에서 기본키를 변경을 못하는 이유가 뭔지 알 수 있을까요? 그냥 JPA에서 무턱대고 막아둔게 아니라면 그 이유가 궁금합니다.

 

이렇게 질문해주셨습니다.

먼저 JPA에서 pk update를 지원하지는 않는 것 같습니다. JPA 특성상 영속성 컨텍스트에서 엔티티들은 기본키를 기준으로 식별하기 때문에 그 기본키를 수정하는 방법을 지원하지 않는 것 같습니다. 엔티티를 기본키를 보고 식별하는데 그 기본키를 바꾸면 문제가 생길 수 있습니다.

 

그리고 개인적으로 기본키를 업데이트하는 방식을 추천드리지 않습니다. 겪어보셨듯이 해당 기본키를 외래키로 가지고 있는 다른 테이블까지 변경 여파가 가는데, 이 문제점은 데이터가 많으면 많아질수록 더 심각하게 생길 것입니다. pk에 글번호라는 비즈니스 요구사항을 적용하는 것에 대한 비용과 트레이드 오프를 고민해보시고, 다른 방법과도 그 장단점을 고민해보시길 추천드립니다. :)


감사합니다.