Java/JPA with Error
[해결 방법] java.sql.SQLIntegrityConstraintViolationException
HJ0216
2023. 6. 25. 09:41
🌿 기본 환경: IDE: STS4, Language: Java
JPA entity로 생성한 테이블에 trigger를 통해 데이터를 INSERT하고자 할 경우,
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
DELIMITER //
CREATE TRIGGER tempSeqTrigger BEFORE INSERT ON tempUser
FOR EACH ROW
BEGIN
DECLARE sequence_value INT;
INSERT INTO tempSeq VALUES (NULL);
SET sequence_value = LAST_INSERT_ID();
SET NEW.id = CONCAT(NEW.type, LPAD(sequence_value, 6, '0'));
END//
DELIMITER ;
|
🚨 다음과 같은 Error 발생
java.sql.SQLIntegrityConstraintViolationException: Column '...' cannot be null
발생 원인
INSERT 시, JPA에서 setId를 통해 PK값을 주입 전에 trigger가 실행되어 trigger에서 null exception을 발생시킴
* 실행순서 Trigger → JPA insert
트리거에서 NEW.user_id 값을 설정하려고 하지만, JPA는 이전에 생성된 userEntity 객체를 사용하여 저장을 시도하므로 user_id 컬럼이 null인 상태로 반환됨
해결 방법
@PrePersist를 사용하여 JPA를 통해 userEntity를 저장하기 전에 해당 컬럼에 값을 할당해야 함
1
2
3
4
5
6
|
@PrePersist
public void prePersist() {
String uuid = UUID.randomUUID().toString();
this.id = uuid;
}
|