Spring Boot + JPA + In-memory h2 환경에서 레포지토리 테스트 중 다음과 같은 에러 발생
에러
Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Syntax error in SQL statement "\000d\000a create table [*]user (\000d\000a user_id bigint not null auto_increment,\000d\000a birth date,\000d\000a created_date datetime(6),\000d\000a email varchar(255),\000d\000a gender enum ('M','W'),\000d\000a introduction varchar(200),\000d\000a last_modified_date datetime(6),\000d\000a location varchar(100),\000d\000a mbti enum ('ENFJ','ENFP','ENTJ','ENTP','ESFJ','ESFP','ESTJ','ESTP','INFJ','INFP','INTJ','INTP','ISFJ','ISFP','ISTJ','ISTP'),\000d\000a password varchar(255),\000d\000a role varchar(255),\000d\000a name varchar(45),\000d\000a primary key (user_id)\000d\000a ) engine=InnoDB"; expected "identifier"; SQL statement:
create table user (
user_id bigint not null auto_increment,
birth date,
created_date datetime(6),
email varchar(255),
gender enum ('M','W'),
introduction varchar(200),
last_modified_date datetime(6),
location varchar(100),
mbti enum ('ENFJ','ENFP','ENTJ','ENTP','ESFJ','ESFP','ESTJ','ESTP','INFJ','INFP','INTJ','INTP','ISFJ','ISFP','ISTJ','ISTP'),
password varchar(255),
role varchar(255),
name varchar(45),
primary key (user_id)
) engine=InnoDB [42001-224]
원인
h2의 예약어로 지정되어있는 'user'을 테이블명으로 사용했기 때문
해결
설정 파일에 엔티티 클래스의 이름과 컬럼을 백틱(`)으로 감싸주는 설정을 추가
spring.jpa.properties.hibernate.globally_quoted_identifiers=true
다시 실행해보면 아래와 같이 쿼리가 만들어지고 정상 동작
create table `user` (
`user_id` bigint not null auto_increment,
`birth` date,
`created_date` datetime(6),
`email` varchar(255),
`gender` enum ('M','W'),
`introduction` varchar(200),
`last_modified_date` datetime(6),
`location` varchar(100),
`mbti` enum ('ENFJ','ENFP','ENTJ','ENTP','ESFJ','ESFP','ESTJ','ESTP','INFJ','INFP','INTJ','INTP','ISFJ','ISFP','ISTJ','ISTP'),
`password` varchar(255),
`role` varchar(255),
`name` varchar(45),
primary key (`user_id`)
) engine=InnoDB;
이 설정에 대한 자세한 내용은 아래 포스팅 참고
references
'데이터베이스' 카테고리의 다른 글
[DB / 테스트] @DataJpaTest (0) | 2024.11.26 |
---|---|
[DB / H2] spring.jpa.properties.hibernate.globally_quoted_identifiers=true 설정 (0) | 2024.11.26 |
[DB] Error / engine[*]=InnoDB"; expected "identifier";] (0) | 2024.11.24 |
[DB / MySQL] Index의 동작 원리 (0) | 2024.07.11 |
[DB / 트랜잭션] Transaction /Spring @Transactional 사용법 (0) | 2024.05.16 |