H2 스키마 초기화.SQL 문에 구문 오류가 있습니다.
스프링 부트 응용 프로그램이 있는데 응용 프로그램 시작 시 일부 데이터를 초기화하려고 합니다.
다음은 내 응용 프로그램 속성입니다.
#Database connection
spring.datasource.url=jdbc:h2:mem:test_db
spring.datasource.username=...
spring.datasource.password=...
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.initialize=true
spring.datasource.schema=schema.sql
spring.datasource.data=schema.sql
#Hibernate configuration
#spring.jpa.hibernate.ddl-auto = none
스키마입니다.sql:
CREATE TABLE IF NOT EXISTS `Person` (
`id` INTEGER PRIMARY KEY AUTO_INCREMENT,
`first_name` VARCHAR(50) NOT NULL,
`age` INTEGER NOT NULL,
PRIMARY KEY(`id`)
);
및 data.sql
INSERT INTO `Person` (
`id`,
`first_name`,
`age`
) VALUES (
1,
'John',
20
);
그러나 애플리케이션 시작 시 'SQL 문에 구문 오류'가 발생했습니다.
19:08:45.642 6474 [main] INFO o.h.tool.hbm2ddl.SchemaExport - HHH000476: Executing import script '/import.sql'
19:08:45.643 6475 [main] ERROR o.h.tool.hbm2ddl.SchemaExport - HHH000388: Unsuccessful: CREATE TABLE Person (
19:08:45.643 6475 [main] ERROR o.h.tool.hbm2ddl.SchemaExport - Syntax error in SQL statement "CREATE TABLE PERSON ( [*]"; expected "identifier"
Syntax error in SQL statement "CREATE TABLE PERSON ( [*]"; expected "identifier"; SQL statement:
이해할 수가 없어요, 이 SQL에 무슨 문제가 있나요?
이 코드를 사용해 보십시오.제거한다.PRIMARY KEY(
이드)
실행합니다.
CREATE TABLE IF NOT EXISTS `Person` (
`id` INTEGER PRIMARY KEY AUTO_INCREMENT,
`first_name` VARCHAR(50) NOT NULL,
`age` INTEGER NOT NULL
);
이 오류는 다음의 구조에서 발생합니다.CREATE TABLE
선언.
SQL 선언의 끝에 쉼표가 하나 더 있으면 쉼표 뒤에 열 선언이 없습니다.예:
CREATE TABLE IF NOT EXISTS `Person` (
`id` INTEGER PRIMARY KEY AUTO_INCREMENT,
`first_name` VARCHAR(50) NOT NULL,
`age` INTEGER NOT NULL, --note this line has a comma in the end
);
그것은CREATE TABLE
테이블과 함께 생성될 열 목록을 예상하며, 열의 첫 번째 매개 변수는identifier
여기서 확인하면 열 선언은 다음 구조를 따릅니다.
identifier datatype <constraints> <autoincrement> <functions>
따라서, 당신의 경우, @budthapa와 @Vishwanath Mataphati가 언급했듯이, 당신은 간단히 제거할 수 있습니다.PRIMARY KEY(id)
에서 나온 회선CREATE TABLE
선언.또한 열 정의의 첫 번째 줄에 있는 기본 키라고 이미 언급했습니다.
주 키 선언으로 지정된 문이 없는 경우, 마지막 열 선언 다음에 추가 쉼표가 있는지 확인하십시오.
나는 아래의 application.properties에 추가되었고 그것은 나에게 효과가 있습니다.
봄.jpa. 속성hibernate.hibernate_hybernate_identifiers=true spring.jpa.properties.hibernate.dhibern_dhibern_identifier_column_definitions = true
사용해 본 대로 사용해 보십시오.
CREATE TABLE IF NOT EXISTS Person (
id INTEGER PRIMARY KEY AUTO_INCREMENT,
first_name VARCHAR(50) NOT NULL,
age INTEGER NOT NULL
);
제 경우에 도움이 된 것은 삽입 쿼리의 테이블 이름에서 단일 따옴표를 제거한 것입니다.
나는 이것을 바꿔야 했습니다.
INSERT INTO 'translator' (name, email) VALUES ('John Smith', 'john@mail.com');
대상:
INSERT INTO translator (name, email) VALUES ('John Smith', 'john@mail.com');
자동 증분 ID를 설정하여 ID로 새 레코드를 삽입할 수 없습니다.
Try INSERT INTO `Person` (
`first_name`,
`age`
) VALUES (
'John',
20
);
저도 같은 문제에 부딪혔어요.이것으로 고쳤습니다.application.properties
:
spring.jpa.properties.hibernate.connection.charSet=UTF-8
spring.jpa.properties.hibernate.hbm2ddl.import_files_sql_extractor=org.hibernate.tool.hbm2ddl.MultipleLinesSqlCommandExtractor
다중 회선 및 기본 인코딩과 관련된 문제가 있습니다.
JPA Entity의 필드 중 하나가 SQL reserved 키워드(FROM
).
이전:
@Entity
public class Event {
...
@NotNull
private LocalDateTime from;
}
수정:
@Entity
public class Event {
...
@NotNull
private LocalDateTime fromDate;
}
저의 경우 문제는 "연도"라는 정수 필드를 사용하는 것이었습니다.
언급URL : https://stackoverflow.com/questions/44267245/h2-schema-initialization-syntax-error-in-sql-statement
'itsource' 카테고리의 다른 글
장고에서 OR 쿼리 필터를 동적으로 구성하는 방법은 무엇입니까? (0) | 2023.07.21 |
---|---|
Spring Boot Rest 컨트롤러에서 JWT 토큰 액세스 (0) | 2023.07.21 |
플라스크-sqlalchemy 또는 sqlalchemy (0) | 2023.07.21 |
순수 JPA에서 네이티브 쿼리에 대한 기본 데이터베이스 스키마를 구성하는 방법은 무엇입니까? (0) | 2023.07.21 |
Helm을 통해 배포된 Java Spring 부팅 응용 프로그램에서 구성 맵의 속성을 사용하는 방법 (0) | 2023.07.21 |