에러메시지
Caused by: org.hibernate.exception.SQLGrammarException: could not prepare statement
에러 원인
- H2의 문법이 적용된 쿼리를 MySQL 버전으로 변경하기 위한 설정 도중 에러 발생
application.properties
- Spring Boot ver. 2.1.9까지는 적용되는 소스
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
해결 방법
applilcation.properties 설정 변경
- Spring Boot ver. 2.1.10 이후부터 적용되는 소스
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL57Dialect
spring.jpa.properties.hibernate.dialect.storage_engine=innodb
spring.datasource.hikari.jdbc-url=jdbc:h2:mem://localhost/~/testdb;MODE=MYSQL
주의점
- MySQL5Dialect 사용 시
auto innodb 적용 X
ver. 2.2.2 일 때도 MySQL57Dialect 사용해야 할듯 - ver. 2.1.10 이후 직접 jdbc-url 선언 ➡ ;MODE=MYSQL가 H2주소 뒤에 붙어야 MySQL 테이블 쿼리 정상 작동됨
- storage_engine=innodb 사용하지 않으면 MyISAM으로 쿼리 수행됨
출처 : https://github.com/jojoldu/freelec-springboot2-webservice/issues/67
댓글