헤르메스 LIFE

[Exception] Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Syntax error in SQL statement "\000d\000a 본문

Exception

[Exception] Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Syntax error in SQL statement "\000d\000a

헤르메스의날개 2023. 2. 26. 00:12
728x90

개발환경 :

Spring Boot 2.7.9

Database : H2-2.1.214

JDK : 11.0.18 x64

JPA


H2 Database 를 이용해서, User 라는 JPA Entity 를 생성하는 테스트를 하던 중 아래와 같은 오류가 발생했습니다.

package octopus.entity;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

import org.hibernate.annotations.Proxy;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

@Builder // builder를 사용할수 있게 합니다.
@Entity // jpa entity임을 알립니다.
@Getter // user 필드값의 getter를 자동으로 생성합니다.
@Setter
@NoArgsConstructor // 인자없는 생성자를 자동으로 생성합니다.
@AllArgsConstructor // 인자를 모두 갖춘 생성자를 자동으로 생성합니다.
@Table(name = "user") // 'user' 테이블과 매핑됨을 명시
@JsonIgnoreProperties({ "hibernateLazyInitializer", "handler" }) // Post Entity에서 User와의 관계를 Json으로 변환시 오류 방지를 위한 코드
@Proxy(lazy = false)
public class User extends CommonDateEntity {
	/**
     * 
     */
    private static final long serialVersionUID = 1246865649224168898L;

    @Id // pk
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private long seq;
	
	@Column(nullable = false, unique = true, length = 50)
	private String user_id;
	
    @Column(nullable = false, length = 100)
    private String name;
	
	@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
	@Column(length = 100)
	private String password;
	
}
INFO  23-02-25 23:22:415[restartedMain] org.hibernate.dialect.Dialect.<init>[175]: - HHH000400: Using dialect: org.hibernate.dialect.H2Dialect
WARN  23-02-25 23:22:739[restartedMain] org.hibernate.tool.schema.internal.ExceptionHandlerLoggedImpl.handleException[27]: - GenerationTarget encountered exception accepting command : Error executing DDL "
    create table user (
       seq bigint generated by default as identity,
        created_at timestamp,
        modified_at timestamp,
        name varchar(100) not null,
        password varchar(100),
        user_id varchar(50) not null,
        primary key (seq)
    )" via JDBC Statement
Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Syntax error in SQL statement "\000d\000a    create table [*]user (\000d\000a       seq bigint generated by default as identity,\000d\000a        created_at timestamp,\000d\000a        modified_at timestamp,\000d\000a        name varchar(100) not null,\000d\000a        password varchar(100),\000d\000a        user_id varchar(50) not null,\000d\000a        primary key (seq)\000d\000a    )"; expected "identifier"; SQL statement:

    create table user (
       seq bigint generated by default as identity,
        created_at timestamp,
        modified_at timestamp,
        name varchar(100) not null,
        password varchar(100),
        user_id varchar(50) not null,
        primary key (seq)
    ) [42001-214]

구글링을 많이 해봤지만, 뚜렸한 해답이 아니였습니다. 혹시 해서 User 를 Users 로 변경하니 해결되었습니다.

오히려, Users 가 더 위험 한거 아닌가 싶긴 합니다.

INFOMATION_SCHEMA에 USERS 테이블이 존재합니다. 그럼에도 일단 생성이 됩니다.

시간 날때 확인해봐야 하겠습니다.


User 를 Member 로 변경했습니다.

package octopus.entity;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

import org.hibernate.annotations.Proxy;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

@Builder // builder를 사용할수 있게 합니다.
@Entity // jpa entity임을 알립니다.
@Getter // user 필드값의 getter를 자동으로 생성합니다.
@Setter
@NoArgsConstructor // 인자없는 생성자를 자동으로 생성합니다.
@AllArgsConstructor // 인자를 모두 갖춘 생성자를 자동으로 생성합니다.
@Table(name = "member") // 'user' 테이블과 매핑됨을 명시
@JsonIgnoreProperties({ "hibernateLazyInitializer", "handler" }) // Post Entity에서 User와의 관계를 Json으로 변환시 오류 방지를 위한 코드
@Proxy(lazy = false)
public class Member extends CommonDateEntity {
	/**
     * 
     */
    private static final long serialVersionUID = 1246865649224168898L;

    @Id // pk
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private long seq;
	
	@Column(nullable = false, unique = true, length = 50)
	private String id;
	
    @Column(nullable = false, length = 100)
    private String name;
	
	@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
	@Column(length = 100)
	private String password;
	
}
728x90