들어가며
JPA 학습 중 테이블 생성과정에서 아래 오류가 발생했다.
org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL " drop table if exists order cascade " via JDBC Statement
바로 구글링을 해봤다.
문제의 원인
예제 코드의 엔티티 중 "Order"가 문제였다. SQL의 예약어를 엔티티 이름으로 사용하는 경우 위와 같은 문제가 발생한다. Order는 Order by에 사용되는 키워드다. 다른 예시로 이 글에서는 "Group"을 엔티티 이름으로 사용하여 동일한 문제가 발생했던 것을 알 수 있었다. Group 또한 Group by의 예약어로 사용된다.
해결방안
근본적으로 예약어를 엔티티 이름으로 사용하지 않는 것이 해결 방법이다. 구체적인 방법은 크게 두 가지가 있다. 하나는 클래스 이름을 변경하는 방법이고, 다른 하나는 @Table을 통해 테이블 이름을 변경하는 것이다.
후자가 편하긴 하지만 이 오류가 발생하는 경우는 대부분 엔티티를 설계하는 단계일 테니깐 장기적인 관점에서 클래스 이름을 변경하는 방법도 괜찮다.
조금 더 찾아보니 요즘은 모든 엔티티에 @Table을 명시하는 방향으로 개발하는 것 같다.
마치며
엔티티의 이름이 테이블명으로 사용된다는 인식을 갖고, 네이밍을 할 때 조금 더 생각을 하고 지어야 한다는 결론을 내렸다. 그리고 모든 엔티티에는 @Table을 통해 명시적인 테이블 이름을 선언하는 습관을 가져야겠다.
'Development > Troubleshooting' 카테고리의 다른 글
HHH000206: hibernate.properties not found 오류 해결하기 (0) | 2020.06.20 |
---|---|
폐쇄망에서 K사 로그인API 적용 후기 (0) | 2020.06.14 |
[개발 Tip] Intellij에서 lombok을 인식하지 못하는 경우 해결방법 (0) | 2020.06.04 |
금액표시할 때 쉼표(,)찍는 방법 (0) | 2020.05.20 |