반응형
Spring + JDBC 기반 애플리케이션에서 다음과 같은 예외가 발생하는 경우가 있습니다.
에러 메시지
org.springframework.web.util.NestedServletException: Request processing failed;
nested exception is org.springframework.jdbc.UncategorizedSQLException:
### Error updating database.
Cause: java.sql.SQLException: JDBC-10005: NOT NULL constraint violation ('schema_name'.'table_name'.'column_name').
### Cause: java.sql.SQLException: JDBC-10005: NOT NULL constraint violation ('schema_name'.'table_name'.'column_name').
예외 의미
이 예외는 DB 테이블의 특정 컬럼이 NOT NULL 제약 조건을 가지고 있는데,
애플리케이션에서 해당 값을 null 또는 비워둔 상태로 INSERT/UPDATE 시도할 경우 발생합니다.
주요 원인
원인 | 설명 |
---|---|
DTO 또는 VO 객체의 필드 값 누락 | Controller → Service → DAO 과정 중 필드 누락 |
Mapper XML 또는 PreparedStatement에서 해당 파라미터 미전달 | MyBatis 또는 JDBC에서 파라미터 누락 |
기본값 없이 DB 컬럼에 null 전달 | DB 제약 조건 위반 |
해결 방법
1. 해당 컬럼 값이 항상 전달되는지 확인
- Controller → Service → DAO 흐름에서 해당 필드가 정상 전달되는지 디버깅
- 예:
column_name
필드가null
인지 체크
2. Mapper 또는 SQL 쿼리 확인
<update id="updateData">
UPDATE table_name
SET column_name = #{columnName}
</update>
→ #{columnName}
에 해당하는 파라미터가 전달되지 않으면 오류 발생
3. DB 컬럼에 기본값 설정 고려 (단, 비즈니스 로직에 따라 주의)
ALTER TABLE table_name
MODIFY column_name VARCHAR2(20) DEFAULT 'N/A' NOT NULL;
결론
이 오류는 단순한 SQL 문법 오류가 아니라, DB 구조와 애플리케이션 로직 간 데이터 정합성 문제입니다.
특히 NOT NULL 제약 조건이 설정된 컬럼에는 항상 유효한 값이 입력되도록 코드를 설계해야 합니다.
반응형
'Application Servers & Java' 카테고리의 다른 글
JDBC-14002: Invalid argument type or value – 잘못된 파라미터 전달 오류 (1) | 2025.05.21 |
---|---|
JDBC-590703: Unsupported data type – JDBC에서 지원하지 않는 데이터 타입 오류 (0) | 2025.05.21 |
IllegalBlockSizeException – 복호화 시 블록 크기 오류 발생 (0) | 2025.05.21 |
JDBC-8026: Invalid identifier – 유효하지 않은 식별자 오류 (0) | 2025.05.21 |
org.apache.commons.codec.DecoderException – Hex 디코딩 오류 (0) | 2025.05.20 |