JPA Create Table Error
in Etc / Error on Jpa, Syntax error, Jdbc, Jpa create table error
JPA 초기 적용 시, 테이블 생성 불가 문제
원인 : 테이블 생성 시, CREATE 문이 정상적으로 수행되지 않음.
오류 내용
Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Syntax error in SQL statement “\000a
create table pas_table_info (\000a tbl_info_id bigint not null auto_increment,\000a
modified_wker_dt datetime(6),\000a modified_wker_id varchar(255),\000a
created_wker_dt datetime(6),\000a created_wker_id varchar(255),\000a
tbl_comments varchar(255),\000a tbl_name varchar(255),\000a
tbl_owner varchar(255),\000a tbl_pk varchar(255),\000a
tbl_type varchar(255),\000a primary key (tbl_info_id)\000a ) engine[*]=InnoDB”;
expected “identifier”; SQL statement: ...
오류에 대한 예상 원인
- DB 예약어를 사용하여 객체를 정의할 경우, 해당 에러가 발생함.
- 인터넷에 찾아보면 제일 많았던 오류, 그래서 다 찾아봤으나 해결 못함.
- Dialect 설정이 잘못된 경우, mysql 방언도 종류 별로 deprecated 된 클래스도 있고 다양함.
- 하지만 딱히 크게 문제되는 부분이 없었음.
- DB 버전에 맞게 설정했어도 문제가 동일하게 발생함
- 드라이버 설정이 DB와 호환성 문제 발생 케이스
- 드라이버 설정 및 버전이 DB와 호환이 안되는 경우에 발생
- 해당 케이스 수정하여도 문제 동일하게 발생함.
해결
원래 초기 설정 내 datasource의 경우, 기존 업무 프로젝트에서 사용한 것과 동일하게 가져옴.
다만 설정만 가져왔지 별도의 DB config나 그런건 가져오지 않음. 여기서 문제가 발생함.
- 기존 datasource 코드
datasource:
primary:
driver-class-name: com.mysql.cj.jdbc.Driver
jdbc-url: jdbc:mysql://127.0.0.1:3306/test
username: test
password: 1234
- 문제 해결한 코드
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/test
username: test
password: 1234
왜 문제가 되었나?
설정의 spring.datasource.jdbc-url
이 문제가 되었다. Spring 에서는 spring.datasource.url
이 없으면, 자동으로 Embeded database가 자동으로 실행된다. jdbc-url은 자동설정된 datasource빈을 사용하지 않고, 직접 config 설정한 빈을 사용할때 사용된다.(예: 여러개의 datasource가 필요할경우).
즉 스프링 부트 내부에서는 hikari cp가 기본 설정이긴 하지만 hikari.jdbc-url
옵션을 참고하지 않는다. 따라서, 별도 설정된 데이터소스 Config 가 없는 상황에서 jdbc-url을 사용하여, 구동 시 해당 주소를 찾지 못해 Create를 내장된 h2에 치려고 하니 방언을 mysql 로 잡아서 문법에러가 계속 발생했다.
실제로 위 에러 내용을 보면 Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException
라고 되어 있다.
MySQL 로 연결 시도를 했는데 왜 h2 DB 에러를 발생시키지? 를 먼저 생각했다면 파악할 수도 있었을 것 같다.
참고
- https://blog.naver.com/PostView.naver?blogId=sipzirala&logNo=222484525256&parentCategoryNo=&categoryNo=&viewDate=&isShowPopularPosts=false&from=postView
- https://jojoldu.tistory.com/296
- https://stackoverflow.com/questions/71255939/what-is-difference-spring-datasource-hikari-jdbc-urls-parameter-connection-tim