SQL 예약어 매핑 오류 (SQL Error: 42001, SQLState: 42001)

@Entity
@Getter
@Setter
public class Order {

    @Id
    @GeneratedValue
    private Long id;

	@Column
    private String username; 
    
    @Column
    private String payStatus;
}

Order라는 Entity 객체를 매핑하여 테스트를 돌렸을 시 아래와 같은 오류가 발생했습니다.

 

알아보니 이러한 오류가 발생한 문제는 다음과 같습니다.

오류 원인

Hibernate 는 JPA 엔티티 클래스를 보고 데이터베이스 테이블을 자동 생성해 줍니다.

만약 엔티티 클래스의 이름이 Item 이라면 Item이라는 테이블을 생성해줍니다.

그런데 여기서 문제가 있습니다.

데이터베이스 키워드/예약어(ORDER, GROUP, SELECT, WHERE 등)와 테이블이 이름이 같다면 정상적으로 실행되지 않는 것입니다.

즉, 엔티티 클래스의 이름은 Order인데 정렬하는 키워드인 Order가 테이블명으로 생성되었기 때문에 이러한 오류가 발생했습니다.

 

해결 방법

엔티티 클래스명을 변경하거나 @Table 어노테이션을 사용해 테이블이름을 지정해주는 방법이 있습니다.

@Entity
@Table(name = "orders") 
@Getter
@Setter
public class Order {
...
}

 

추가로 주의 할점

엔티티의 필드명(Column) 또한 데이터베이스 키워드/예약어와 같아선 안됩니다.

DB 테이블을 설계할 때 Table의 Column명 또한 SQL 예약어를 사용하지 않도록 주의 합시다.