발생 배경
resource 의 data.sql 파일에 값을 넣고 실행하니 CommandAcceptanceException 이 발생하였다
중략
맨 마지막 SQLSyntaxErrorException을 보고 문법이 잘못되었나 싶었는데 그건 아니었다.
원인 파악
CommandAcceptanceException에 대해 검색해보니 원인은 다양했다
- 하이버네이트가 table을 만들 때 drop하지 못해서
- 계정의 권한으로는 할 수 없는 쿼리를 작성해서
- SQL이나 H2의 예약어를 사용하여 Entity를 작성해서
나는 1번 사항에는 해당하지 않았다
하이버네이트가 table을 drop 하는 것은 확인되었기 때문이다.
2번 사항도 user 테이블 말고 다른 table에 insert하는 데에는 오류가 발생하지 않았기 때문에 해당하지 않았다.
해결 방법
나는 3번 사항에 해당된다고 파악하여 table의 이름을 user에서 users로 변경해보았다.
처음에는 모든 Entity, dto, repository, service를 모두 rename해야 하나 막막했는데
@Table어노테이션을 사용해 table과 Entity의 이름을 다르게 지정할 수 있었다
table의 이름이 바뀌어서 data.sql도 수정하였다.
이후 Exception 없이 정상적으로 실행되었다!!
에러를 해결하면서
이 에러를 해결하면서
- Entity 객체명과 SQL, JPA, H2 의 예약어가 겹칠 때 예외 발생
- @Table 어노테이션을 사용해 명시적으로 테이블 명을 지정
이 두 사실에 대해 알게되었다!
참고로 user는 H2의 예약어라고 한다.
SQL의 예약어가 아니었어서 더 원인을 찾기 어려웠다.
앞으로 Entity 객체의 이름이 예약어와 겹칠 시 Table 어노테이션으로 table명을 명시해야겠다.
'Framework > SpringBoot' 카테고리의 다른 글
[Spring] Rest Template란? (0) | 2023.09.09 |
---|---|
[Spring] Spring에서 깃허브 OAuth 로그인하기 (0) | 2023.09.01 |
[SpringBoot] @OneToMany, @ManyToOne, @ManyToMany 연관 관계 매핑, @JoinTable (0) | 2023.08.30 |
[SpringBoot]스프링 시큐리티란? (Spring Security) (0) | 2023.08.23 |
[SpringBoot] AnnotationException: targets an unknown entity named : 조인 맵핑 시 데이터 타입이 다를 경우 발생하는 에러 (0) | 2023.06.25 |