Development/Troubleshooting

org.h2.jdbc.JdbcSQLSyntaxErrorException 해결하기

bbubbush 2023. 4. 1. 11:19

들어가며

JPA 학습 중 테이블 생성과정에서 아래 오류가 발생했다.

org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL " drop table if exists order cascade " via JDBC Statement

바로 구글링을 해봤다.

 

 

문제의 원인

SQL 예약어로 엔티티를 이름 짓는 경우

예제 코드의 엔티티 중 "Order"가 문제였다. SQL의 예약어를 엔티티 이름으로 사용하는 경우 위와 같은 문제가 발생한다. Order는 Order by에 사용되는 키워드다. 다른 예시로 이 글에서는 "Group"을 엔티티 이름으로 사용하여 동일한 문제가 발생했던 것을 알 수 있었다. Group 또한 Group by의 예약어로 사용된다.

 

해결방안

근본적으로 예약어를 엔티티 이름으로 사용하지 않는 것이 해결 방법이다. 구체적인 방법은 크게 두 가지가 있다. 하나는 클래스 이름을 변경하는 방법이고, 다른 하나는 @Table을 통해 테이블 이름을 변경하는 것이다.

후자가 편하긴 하지만 이 오류가 발생하는 경우는 대부분 엔티티를 설계하는 단계일 테니깐 장기적인 관점에서 클래스 이름을 변경하는 방법도 괜찮다.

조금 더 찾아보니 요즘은 모든 엔티티에 @Table을 명시하는 방향으로 개발하는 것 같다.

@Table을 통해 테이블 이름을 변경

 

마치며

엔티티의 이름이 테이블명으로 사용된다는 인식을 갖고, 네이밍을 할 때 조금 더 생각을 하고 지어야 한다는 결론을 내렸다. 그리고 모든 엔티티에는 @Table을 통해 명시적인 테이블 이름을 선언하는 습관을 가져야겠다.