개요
JPA 로 엔티티 매핑 시에 발생하는 문제인데, 최근 2~3 일 자주 접했다. 대수롭지 않게 여기다가 이번에 원인을 알게 되었다.
접한 에러 구문
java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near
처음에는 JPA 엔티티 매핑을 잘못했나 싶은 생각이 들었다. 복합키에 대한 설정부터 시작해서 @JoinColumn 에 대한 속성값을 잘못 지정했다던지 하는 그러한 의문들. 실제로 복합키 설정도 잘못하긴 했다. 여튼 저 에러를 구글링 해본 결과 아래과 같은 내용을 확인할 수 있었다.
디비명, 컬럼명의 충돌, 동일한 컬럼명을 가진 내용이 해당 DB 에 존재하기 때문에 syntax 가 오류가 발생하는 것이다. 하루에서 이틀정도 그냥 무심코 지나치는 문제였었다. 개발 DB 에서는 저 에러가 나타나지 않았는데, ddl-auto 타입을 validate 상태로 두고 데이터베이스 스키마 관계매핑이 맞는지 여부만 체크하였기 때문이다. 하지만 로컬 DB 에서 ddl-auto 타입을 create 또는 create-drop 으러 수행하는 경우에는 테이블을 drop 시켰다가 다시 create 과정을 거치면서 테이블 생성 시 문제가 야기되는 것이었다.
더 자세한 설명들은 아래의 링크에서 확인해볼 수 있었고, 결론적으로 나는 @Column(name = "") 을 변경하고 나서야 올바르게 작동하는 것을 확인할 수 있었다.
application.yml 설정
spring:
profiles:
active: dev
---
spring:
profiles: dev
datasource:
url: jdbc:mysql://localhost:3306/pasudo123_test?useSSL=false&allowPublicKeyRetrieval=true&useTimezone=true&serverTimezone=UTC
username: root
password: rootpass
driver-class-name: com.mysql.cj.jdbc.Driver
jpa:
database-platform: org.hibernate.dialect.MySQL57Dialect
hibernate:
ddl-auto: create
generate-ddl: true
show-sql: true
properties:
hibernate:
format_sql: true
reference
https://vladmihalcea.com/escape-sql-reserved-keywords-jpa-hibernate/
'ErrorMarking' 카테고리의 다른 글
20200125 [error] 인텔리제이 .iml 파일 삭제 이후 문제. (0) | 2020.01.25 |
---|---|
20191226 [error] nginx 관련 에러 (0) | 2019.12.26 |
20191215 [error] No qualifying bean of type ~~ at least 1 bean which qualifies as autowire candidate (0) | 2019.12.15 |
20190817 [error] MySQL Server Time Zone (0) | 2019.08.17 |
20190816 그만 만나고 싶다. 이런 에러들. (0) | 2019.08.16 |