이번 게시글에서는 location_tracking_module 프로젝트를 진행 중에 만난 Syntax error in SQL statement [*] 오류에 대해 다루고자 한다.
아래는 location_tracking_module 프로젝트를 진행중에 발생한 오류이다.
Syntax error in SQL statement "select ak1_0.api_key_id,ak1_0.banned_at,ak1_0.created_at,ak1_0.deleted_at,ak1_0.grade_id,ak1_0.member_id,ak1_0.modified_at,ak1_0.[*]value from api_key ak1_0 left join member m1_0 on m1_0.member_id=ak1_0.member_id where (ak1_0.deleted_at is NULL) and m1_0.member_id=?"; expected "identifier";
'ak1_0.[*]value'는 SQL 구문에서 유효하지 않은 표현이라고 한다.
문제의 원인은 데이터베이스의 예약어를 컬럼명으로 사용하여 발생한 것이다.
아래 링크에서 다양한 데이터베이스의 예약어를 확인할 수 있다.
여기서 문제가 된 VALUE가 예약어로 설정되어 있는 것을 볼 수 있다.
해결 방법에는 대표적으로 두 가지 접근 방법이 있다.
@Column(name = "`value`", unique = true, nullable = false)
private String value;
이번 프로젝트에서는 적절한 대체 컬럼명이 떠오르지 않아, 전자의 방식으로 문제를 해결하였다. 하지만 후자의 방식이 더 적절하다고 생각한다.