개요

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/

https://kwonnam.pe.kr/wiki/java/hibernate/configuration

Posted by doubler
,