웹 개발/error

[error/jpa] SQL에러 Unknown Column in field list

dani0312 2024. 2. 28. 22:35

◾에러 파악하기

✔️Background

기존에는 Jdbc를 이용하여 API개발을 진행하다가, Spring Data JPA를 사용하기 위한 코드로 리팩토링하였다.

리팩토링은 엔터티 한 개에 `@Entity`를 붙여 테이블과 매핑을 하는 것인데,

컴파일 상 오류는 없었고 서버는 정상적으로 동작했다.

 

⚠️Error

에러는 아래와 같다. Unknown column '테이블명_필드명' in field list 라는 오류이다. 

 

상황

문제는 db상의 테이블과 객체의 매핑에 있었다. `LocalDate warehousingDate` 필드 때문이었다.

POST API나 PUT API를 할 시 위와 같은 에러가 터지며 POSTMAN에서는 500에러를보냈다. 

 

db상에는 warehousingDate라는 이름의 테이블이 있으나 jpa가 찾고 있는 warehousing_date라는 테이블은 없는 것이다.  `LocalDate warehousingDate` 필드는 db상에서 스네이크케이스(대문자를 밑줄로 구분)를 사용하기 때문에 이 필드에 대한 테이블로 warehousing_date 을 찾는 것이다. 즉 db상에 컬럼이 없다고 나타나는 에러이다.

 

 

◾에러 해결하기

문제는 위와 같이 db상에 컬럼이 없는 경우도 있고, 문자열 데이터에 따옴표가 없는 경우도 있다고 한다. 정리하면 위의 에러의 대표적인 원인 2가지는 아래와 같다.

 

✔️에러 원인

ERROR: Unknown column in field list

1. 데이터베이스에 컬럼이 존재하지 않는 경우 

2. 문자열 데이터에 따옴표가 없는 경우

 

✔️에러 해결

→ 데이터베이스 컬럼명 변경하기

첫 번째 경우에 해당하였기 때문에 아래와 같이 데이터베이스의 컬럼명을 `warehousingDate` → `warehousing_date`로 변경하였다. 그러면 현재 찾고 있는 컬럼이 생긴 것이므로 에러가 발생하지 않을 것이다. 나는 기존의 컬럼이 있었기 때문에 이름을 변경하였고, 기존 컬럼이 없다면 새로 'warehousing_date'라는 이름의 컬럼을 생성하여도 된다. 어찌되었든 데이터베이스에  지금 콘솔에서 찾고 있는 unknown column(warehousing_date)이 존재하기만 하면 된다!

 

 

물론 jpa기본 설정을 바꿔주어 이 문제를 해결하는 방법도 있는 듯 하다. 그러나 데이터베이스는 보통 snake_case, 자바는 camelCase를 많이 이용하기 때문에 관례를 따라서 데이터베이스 컬럼명을 스네이크 케이스로 변경해주기로 하였다.

 

	ALTER TABLE fruit
	CHANGE COLUMN warehousingDate warehousing_date DATE;

 

위와 같은 쿼리를 작성하였다. 컬럼이 잘 바뀌었는지 확인해보자.

 

 

새로고침해보니 컬럼명이 잘 바뀌어 warehousing_date로 변경되어 있다. POSTMAN에서 API 요청도 잘 보내진다.