프로젝트/2023 개발

[에러] globally_quoted_identifiers (예약어 문제) Syntax error in SQL statement ~ expected "identifier"

60cod 2023. 11. 16. 13:39

application.yml 파일에서 다음 설정을 추가했는데도 예약어 에러가 발생한 이유

spring.jpa.hibernate.globally_quoted_identifiers: true

 

 

에러 내용

nested exception is org.h2.jdbc.JdbcSQLSyntaxErrorException: Syntax error in SQL statement "insert into [*]user(no, user_id, name, password) values(1, 'test1', 'name1', 'test1111')"; expected "identifier";

 

설명

데이터베이스에 따라 예약어를 식별자로 사용하는 경우가 있고, 사용하지 못하도록 하는 경우도 있습니다. 일반적으로 데이터베이스는 예약어를 따옴표로 묶어서 사용하면 해당 식별자를 예약어로 취급하지 않도록 하는 옵션을 제공합니다. 그러나 이것이 항상 보장되지는 않습니다.

globally_quoted_identifiers는 Hibernate의 설정 중 하나로, 이 설정을 true로 지정하면 Hibernate가 생성하는 모든 SQL 쿼리에서 식별자를 따옴표로 묶게 됩니다. 그러나 이 설정이 켜져 있다고 해도, 데이터베이스가 따옴표로 묶인 예약어를 지원하지 않는 경우에는 여전히 문제가 발생할 수 있습니다. 몇몇 데이터베이스는 따옴표로 묶인 식별자를 특별 취급하여 예약어로 처리할 수 있습니다.

따라서 user라는 단어가 SQL 예약어이기 때문에, globally_quoted_identifiers 설정이 true로 되어 있어도 이 예약어를 사용하려면 해당 데이터베이스가 이를 지원하고 있어야 합니다. 만약 지원하지 않는다면, 테이블 이름을 변경하거나 따옴표로 묶지 않고 사용하는 것이 좋습니다.

 

해결

테이블명 변경했음.

user -> users

post -> posts

컬럼명 no도 바꿔야 할 거 같은데 안 바꿔도 먹히길래 걍 함..