티스토리 뷰

스프링 부트 버전이 2.7.0으로 올라가면서 H2 버전도 같이 2.x.x로 변경되었는데, 이전에 예약어가 아니었던 year가 예약어가 되어 애플리케이션이 깨지는 현상이 발생하였습니다.

근본적인 해결 방법은 예약어 컬럼명을 따옴표(quote)를 감싸는 것인데 이렇게 처리하기 위한 몇 가지 방법을 소개합니다.

@Column 애너테이션 내 따옴표(") 사용

이전에는

@Column(name="open")

이렇게 예약어를 사용하는 경우

@Column(name="`open`")

백틱을 추가하는 방식으로 해결 가능했었는데요,

이제는

@Column(name="\"year\"")

이런식으로 따옴표를 추가하여 해결할 수 있습니다.

설정 변경

hibernate의 설정을 추가하여 해결할 수 있습니다.

hibernate.auto_quote_keyword=true

이 속성을 추가하면 모든 예약어에 대해 따옴표를 추가합니다.

스프링 부트에 적용하려면 아래 처럼 설정할 수 있습니다.

jpa.properties.hibernate.auto_quote_keyword=true
jpa:
    properties:
        hibernate:
            auto_quote_keyword: true
hibernate.globally_quoted_identifiers=true

이 속성을 추가하면 모든 DB identifier에 대해 따옴표를 추가합니다.

 

댓글