오늘의 에러
Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Syntax error in SQL statement "ALTER TABLE ORDER_DETAIL ADD CONSTRAINT FKPLAM7WXC4TJBGEX0XYK8F0QXO FOREIGN KEY (ORDER_ID) REFERENCES ORDER[*] (ORDER_ID) "; expected "identifier"; SQL statement:
문제
구조는 Order 엔티티가 OneToMany의 OrderDetail 엔티티들을 가지고 있는 형태이다.
Order.java
@Entity
@Table(name = "ORDER")
public class Order {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ORDER_ID", nullable = false)
private Long id;
@OneToMany
@JoinColumn(name = "ORDER_ID")
private List<OrderDetail> orderDetailList;
...
}
OrderDetail.java
@Entity
@Table(name = "ORDER_DETAIL")
public class OrderDetail {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ORDER_DETAIL_ID", nullable = false)
private Long id;
@Column(name = "ORDER_ID", nullable = false)
private Long orderId;
...
}
스프링 부트 어플리케이션을 시작하니 expected "identifier" 어쩌구 하는 에러가 난다.
에러 메세지를 대충 보았을땐 다 맞게 한 것 같은데 왜 저러는지 이해가 안갔는데 구글신님께서 나와 동일한 문제의 포스트를 찾아주셨다.
답은 Order 엔티티의 테이블 명 때문이다. Order는 SQL의 키워드 중 하나이기 때문에 테이블 이름으로 사용 할 수 없다...
해결 방법
해결 방법은 간단히 다른 테이블 명을 사용하면 된다.
변경 전
@Table(name = "ORDER")
변경 후
@Table(name = "ORDER_TABLE")