SpringJPA_ReservedWords_Issue (DB 예약어 컬럼 이슈.)
- 현재 버전 : Spring Boot 2.1.7.RELEASE / Maria DB 10.2 (MySQL 5.6)
- 테이블 모델링을 하다보면 데이터베이스에서 이미 사용하는 예약어를 컬럼명으로 사용할 때가 있다.
- 해당 컬럼명을 그대로 SpringJPA 에서 사용하면 Query 실행 중에 Syntax Error 가 발생하게 된다.
DB 예약어 목록
MariaDB Doc : https://mariadb.com/kb/en/reserved-words/
해당 Issue 해결방법
- Entity 정의 할 때 컬렁 명을 추가한다.
- AS-IS
@Entity
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@ToString
public class Test {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String key; //key는 DB 예약어이다.
}
- TO-BE
@Entity
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@ToString
public class Test {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@Column(nullable = false, name = "`key`")
private String key; //key는 DB 예약어이다.
}
- @Column Annotation을 활용하여 컬럼명 사이 ``(backtick) 을 추가하면 된다!
만약 update 컬럼이 예약어가 아니일때
- JPA 는 Dirty Checking (상태 변경 검사) 으로 생성되는 UpdateQuery 는 모든 컬럼을 업데이트 한다.
- 따라서 특정 컬럼만 수정하고싶을 때 @DynamicUpdate Annotation을 추가하면 Update 대상인 특정 컬럼만 Update 된다!
@Entity
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@DynamicUpdate
@ToString
public class Test {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@Column(nullable = false, name = "`key`")
private String key; //key는 DB 예약어이다.
}
참조자료
반응형
'Spring > Spring Data' 카테고리의 다른 글
JPA PK 를 SequentialUUID 로 사용하기 (2) | 2023.12.05 |
---|---|
Spring 프로젝트 DataSource 없이 실행 (0) | 2023.02.06 |