인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

kimsang520님의 프로필 이미지
kimsang520

작성한 질문수

자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]

26강. Spring Data JPA를 이용해 다양한 쿼리 작성하기

글삭제시 질문입니다!

작성

·

216

0

현재 코드를 치면서 강의를 따라가다보니 강의가 안들어와서

강의에 집중하려고 코드를 미리 받고 진행을 하고있는데요.
보시다시피 삭제하면 위의 내용처럼 user_loan_history 테이블이 존재하지않다 라고 되어있습니다.

몬가 먼저 제가 코드를 받아서 db 쪽에 user_loan_history 테이블을 참조하는것같은데...

궁금한점이 소스내에 어디에서도 user_loan_history 을 찾아도 해당내용이없는데 어떻게 해당 테이블을 참조하는건가요

답변 2

0

최태현님의 프로필 이미지
최태현
지식공유자

안녕하세요! kimsang520님! 🙂 좋은 질문 감사드립니다. 인프런 AI 인턴은 다른 쪽으로 질문을 받아 들였나봐요! 🤔

 

유저를 삭제하는 과정에서 userRepository.delete(user) 만 했음에도, user_loan_history 까지 삭제하려고 하는 이유는, UserList<UserLoanHistory> 사이 cascade 혹은 orphanRemoval 옵션이 있기 때문입니다!

보다 자세한 내용은 <34강. JPA 연관관계에 대한 추가적인 기능들>에서 확인하실 수 있는데요! 간단히 설명드리면

  • cascade 는 특정 엔티티에 변화가 있을 때 그 엔티티와 연결된 엔티티까지 해당 변화를 적용하는 기능이고,

  • orphanRemoval 은 부모 엔티티에서 특정 자식 엔티티가 연결이 해제되었을 때, 해당 자식 엔티티를 제거하는 기능입니다.

 

즉, 이런 옵션을 사용하면, User를 삭제하려고 할 때 그와 연결된 UserLoanHistory까지 확인해서 제거하려고 하게 되죠! 실제로 두 옵션을 @OneToMany 어노테이션에서 제거하면, 유저만 삭제하도록 쿼리가 나갈거에요! 👍

 

답변이 도움이 되었으면 좋겠습니다.

감사합니다! 🙏

0

안녕하세요, 인프런 AI 인턴입니다.

kimsang520님의 질문은 데이터베이스 내에 user_loan_history 테이블이 존재하지 않음에도 불구하고, 해당 테이블을 참조하는 오류가 발생하는 상황에 대한 것으로 이해됩니다. 이로 인해 발생하는 SQLSyntaxErrorException 오류는 주로 데이터베이스 스키마와 애플리케이션 코드 간 불일치 때문에 발생합니다.

비슷한 문제가 다루어진 기존의 질문 중 하나인 “31강 질문 있습니다.”에서는 user_loan_hostory라는 이름으로 테이블을 잘못 생성했다가, 올바른 이름 user_loan_history로 수정한 후에 문제가 해결되었다는 상황이 설명되어 있습니다. 질문과 상황이 완전히 동일하진 않지만, 테이블 이름 오류와 관련하여 유사한 컨텍스트를 공유하므로 상응하는 해결 방안을 참고할 수 있습니다.

더 구체적으로, 애플리케이션에 user_loan_history 테이블을 참조하는 코드가 명시적으로 보이지 않을 경우, 다음과 같은 가능성을 고려해볼 수 있습니다:
- Entity와 Repository 클래스: 스프링 프레임워크를 이용한 애플리케이션의 경우, 특정 엔티티(entity) 클래스에 대응하는 user_loan_history 테이블을 참조할 수 있습니다. @Entity어노테이션을 사용하고 클래스 이름이나 @Table 어노테이션에 테이블 이름이 명시되어 있는 지 확인해 보세요.
- 애플리케이션 구성(Configuration): JPA나 Hibernate 설정에서 테이블명을 암시적으로 참조할 수 있습니다. 예를 들어, application.properties 또는 application.yml 파일 내 데이터베이스 관련 설정을 확인해 보세요.
- 코드 내의 쿼리(Query)문: 보이지 않는 부분에서 코드 또는 쿼리 문장에 user_loan_history를 직접 참조하고 있을 수 있으니, 전체 프로젝트를 대상으로 테이블 이름이 문자열로 hard-coded 되어 있는 부분이 없는지 검색해 보세요.

주어진 문제를 직접 해결하는 명시적인 답변을 찾기 어려워, 대신 가능한 원인과 해결 방법을 제안해 드립니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

kimsang520님의 프로필 이미지
kimsang520

작성한 질문수

질문하기