작성
·
208
답변 2
0
안녕하세요! kimsang520님! 🙂 좋은 질문 감사드립니다. 인프런 AI 인턴은 다른 쪽으로 질문을 받아 들였나봐요! 🤔
유저를 삭제하는 과정에서 userRepository.delete(user)
만 했음에도, user_loan_history 까지 삭제하려고 하는 이유는, User
와 List<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 되어 있는 부분이 없는지 검색해 보세요.
주어진 문제를 직접 해결하는 명시적인 답변을 찾기 어려워, 대신 가능한 원인과 해결 방법을 제안해 드립니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.