JPA를 통해 DELETE 로직을 실행 중에 발생했다. 이 오류의 원인은 여러가지이다.
- 데이터 존재 여부:
- 실제로 해당 ID의 데이터가 데이터베이스에 존재하는지 확인.
- 테스트 환경과 운영 환경의 데이터베이스가 다를 수 있음.
- 트랜잭션 관리:
- 삭제 작업 전에 조회가 제대로 이루어지고 있는지 확인.
- 트랜잭션 격리 수준이 적절한지 확인.
- JPA 캐시:
- JPA 1차 캐시나 2차 캐시로 인해 최신 데이터를 반영하지 못할 수 있음.
- ID 타입 불일치:
- 전달받은 ID의 타입과 엔티티의 ID 타입이 일치하는지 확인.
- 레포지토리 메소드:
- 사용 중인 레포지토리 메소드가 적절한지 확인. (예: findById vs getOne).
- 엔티티 매핑:
- 엔티티와 테이블 매핑이 올바른지 확인.
이 중 4번 문제가 원인이었던 것!
진행하던 업무는
FK로 참조하고 있는 데이터를 삭제하지 않은 채로 해당 테이블을 삭제하면서 발생한 버그를 수정하는 작업이었고,
참조하고 있는 데이터를 먼저 삭제하는 로직으로 버그를 해결하려 했다.(이 과정도 복잡해서 다른 글에 다룰 예정)
그래서 기존 id로 받던 매개변수를 그대로 메서드로 이어 받아서 새로운 삭제 매서드를 구현했으나,
DB에서 참조하는 테이블이 해당 매개변수를 사용하고 있지 않아서 Entity 를 찾을 수 없었던 것!
그래서 매개변수로 받던 id를 통해 참조되고 있는 테이블을 타고 들어가서,
다시 참조하는 테이블을 삭제하는 로직을 구현하는 식으로 해당 오류는 해결하였다.
(JPA 동작 방식도 다른 글로 다룰 예정)
'개발자 경험 & 팁' 카테고리의 다른 글
배치 처리 (0) | 2024.11.19 |
---|---|
RabbitMQ - 406 에러 (5) | 2024.10.19 |
git pull 실패 (0) | 2024.07.30 |
MariaDB 설치 오류 (0) | 2024.07.18 |