sggnology
하늘속에서IT
sggnology
전체 방문자
오늘
어제
  • 분류 전체보기 (83)
    • Algorithm (31)
      • Programmers (27)
      • Baekjoon (4)
    • WIKI (4)
      • VirtualBox (1)
      • Power Toys (1)
    • NodeJS (4)
      • nvm (1)
      • React (1)
      • Vue (1)
    • Dev Language (3)
      • Java (2)
      • Kotlin (1)
    • Spring Boot (17)
      • Gradle (1)
      • JPA (3)
    • DB (4)
      • MariaDB (3)
      • Redis (0)
    • Android (6)
      • Debug (3)
    • Nginx (3)
      • Debug (1)
    • Intellij (0)
    • Network (1)
    • Git (2)
      • GitHub (2)
    • Chrome Extension (0)
    • ETC (5)
      • Monitoring (2)
    • Linux (1)
      • WSL (1)
    • Visual Studio (1)
    • Side Project (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • Android Studio
  • JPA
  • spring boot
  • 안드로이드 스튜디오
  • 고득점 Kit
  • 프로그래머스
  • 알고리즘
  • mariadb
  • 백준
  • 연습문제
  • nginx
  • 레벨2
  • 티스토리챌린지
  • java
  • 오블완
  • 고득점KIT
  • 레벨3
  • docker
  • DB
  • kotlin

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
sggnology

하늘속에서IT

Spring Boot

[Spring Boot] Spring Boot 에서 JPA 로 값을 수정시 알 수 없는 이유로 sql 에러가 발생할 때(feat. SQL Error: 1064, SQLState: 42000)

2023. 5. 20. 13:48
728x90

발단

DB 에서 값을 변경하려고 JPA 를 통해 시도하였을 때 필자 입장에서는 단순한 VARCHAR(1) 구조의 필드 였음으로 수정되어 마땅한 상황이었지만, 왜인지 SQL Error: 1064, SQLState: 42000 오류가 지속적으로 발생하였다.

 

설명

필자가 사용한 테이블에는 DB 의 예약어를 포함하고 있었다 (예약어인지 모르고 필드로 사용). 테이블의 값을 수정하려 할 때 예약어를 수정하려 한 것은 아니지만, JPA 가 객체 형태로 영속성 매니저에게 값을 전달하고 있었기에 DB 에 전달한 query 를 실행하면서 syntax error 가 발생하게 된것이다.

 

예시

 

DB 구조

CREATE TABLE `test1` (
	`id` INT(11) NOT NULL AUTO_INCREMENT,
	`openYn` VARCHAR(1) NOT NULL DEFAULT 'N' COLLATE 'utf8_general_ci',
	`offset` INT(11) NOT NULL DEFAULT '0',
	PRIMARY KEY (`id`) USING BTREE
)

 

값 수정 시 로그

update
    chatloginfo 
set
    openYn=?,
    offset=?,
  • 예약어가 아닌 openYn 에 대한 값을 수정 하였을 때도 위와 같은 @Entity 객체 값 전부를 query 에 포함한다.
  • 즉, DB 입장에서 offset 을 수정하기 위해 offset 필드에 접근하게 된다.

 

예시 설명

  • 위 로그에서 볼 수 있듯이, openYn 의 값을 변경하려 하였지만 offset(예약어) 또한 query 에 포함되기에 syntax error 가 발생하게 된다.

 

해결

@Column(name = "`offset`", nullable = false)
var offset: Long = 0
  • @Entity 내부에서 예약어로 인한 문제라면 @Column name 필드값을 '`' 로 감싼것으로 수정하자.
  • 위와 같이 수정하게 되면 DB 입장에서 예약어임에도 필드명으로 인지하여 query 가 처리된다.

 

해결된 코드로 수정 요청시 로그

update
    chatloginfo 
set
    openYn=?,
    `offset`=?,
  • '`' 로 필드를 감싸서 요청하는 것을 확인할 수 있다.
728x90

'Spring Boot' 카테고리의 다른 글

[Spring Boot] custom error page 적용(feat. 예제, ErrorController)  (0) 2023.05.26
[Spring Boot] JWT 라이브러리를 의존성 추가했음에도 빌드 오류가 나는건 왜일까?(feat. `io.jsonwebtoken:jjwt-api`)  (2) 2023.05.25
[Spring Boot] s3 aws-java-sdk(v 1.1) 을 사용하는 개발환경에서 SSL 인증서와 무관하게 통신하는 방법(feat. ValidatorException: PKIX path building failed)  (0) 2023.05.23
[Spring Boot] Spring Boot(Kotlin) Gradle 환경에서 docker 이미지를 추출하는 방법(feat. bootBuildImage)  (0) 2023.05.18
[Spring Boot] RestTemplate 으로 ASP.Net 서버와 통신하려 할 때 특정 field 가 전송되지 않는 이슈(feat. Gson)  (0) 2023.05.14
    'Spring Boot' 카테고리의 다른 글
    • [Spring Boot] JWT 라이브러리를 의존성 추가했음에도 빌드 오류가 나는건 왜일까?(feat. `io.jsonwebtoken:jjwt-api`)
    • [Spring Boot] s3 aws-java-sdk(v 1.1) 을 사용하는 개발환경에서 SSL 인증서와 무관하게 통신하는 방법(feat. ValidatorException: PKIX path building failed)
    • [Spring Boot] Spring Boot(Kotlin) Gradle 환경에서 docker 이미지를 추출하는 방법(feat. bootBuildImage)
    • [Spring Boot] RestTemplate 으로 ASP.Net 서버와 통신하려 할 때 특정 field 가 전송되지 않는 이슈(feat. Gson)
    sggnology
    sggnology
    하늘은 파란색이니까 내 삶도 파란색이길 ㅎㅎ

    티스토리툴바