SpringBoot에서 Entity를 생성하던 중 오류가 발생했다.
@Entity
@Table(name = "USER", indexes = {
@Index(name="idx_userid_username", columnList = "u_id, u_name", unique= true),
@Index(name="idx_username", columnNames="u_name")
})
class User{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Integer id;
@Column(name = "u_id", nullable = false, unique = true, length = 255)
String userId;
@Column(name = "u_pw", nullable = false, length = 255)
String userPw;
@Column(name = "u_name", nullable = false, length = 255)
String userName;
}
를 만들고 어플리케이션 실행을 했더니
Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Syntax error in SQL statement "create table [*]user (id integer generated by default as identity, u_id varchar(255) not null, u_name varchar(255) not null, u_pw varchar(255) not null, primary key (id))"; expected "identifier"; SQL statement:
라는 오류 문구가 뜨면서 실행이 되지않았다.
처음에는 조금 당황했지만, 비슷한 오류에 대해서 찾아본 결과 user라는 이름이 sql 상에서 예약어로 사용되어서 생긴 오류였다.
즉, 테이블 이름을 다른 이름으로 지정하면 간단하게 해결 할 수 있다.
@Entity
@Table(name = "USERS", indexes = {
@Index(name="idx_userid_username", columnList = "u_id, u_name", unique= true),
@Index(name="idx_username", columnNames="u_name")
})
@Table 어노테이션 내에 테이블이름을 지정할 수 있는 name에 이름을 USERS로 변경하면 간단하게 해결할 수 있는 문제였다.