🌿 기본 환경: IDE: STS4, Language: Java
JPA에서 Custom ID를 부여하기 위해서는 테이블 작업 이후, 추가적인 과정이 필요
MySQL에서는 Sequence를 제공하지 않으므로 그에 대한 대안으로, sequence 테이블을 만들고 trigger와 연동시키는 과정이 필요
1. Sequence table 생성
1
2
3
4
|
CREATE TABLE tempSeq (
sequence_value INT AUTO_INCREMENT PRIMARY KEY
);
|
2. Trigger를 선언하여 seq를 사용하는 테이블과 연결
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 ;
|
* CREATE TRIGGER tempSeqTrigger BEFORE INSERT ON tempUser
- tempUser(seq를 사용하고자하는 entity)에 insert하기 전 사용할 trigger 선언
* DECLARE sequence_value INT
- SEQ 테이블의 seq column값 선언
* INSERT INTO tempSeq VALUES (NULL)
- SEQ 테이블에 null값 insert
* SET sequence_value = LAST_INSERT_ID()
- 직전에 삽입된 행의 자동 증가 값(시퀀스 값)을 반환하는 함수
* SET NEW.id = CONCAT(NEW.type, LPAD(sequence_value, 6, '0'));
- tempUser 테이블의 type과 sequence_value값을 결합
- LPAD: 지정한 길이(6)만큼 값이 부여되지 않을 경우 지정한 값('0')으로 채움
3. JPA에서 insert 작업 전 @PrePersist 선언
1
2
3
4
5
6
|
@PrePersist
public void prePersist() {
String uuid = UUID.randomUUID().toString();
this.id = uuid;
}
|
* @PrePersist
- Entity가 저장되기 전에 자동으로 호출되며, UUID 값을 생성하고 id 필드에 할당
⭐ INSERT 발생 시, @PrePersist 실행 후, Trigger 동작으로 custom id 부여
추가 자료
'Java > JPA' 카테고리의 다른 글
[JPA_Basic] 데이터베이스 스키마 자동 생성 (0) | 2023.07.31 |
---|---|
[JPA_Basic] Persistence Context 장점 (0) | 2023.07.29 |
[JPA] JOIN Null값 처리 (0) | 2023.06.20 |
[SpringBoot_JPA_Basic] JPA 1차 cache (0) | 2023.06.16 |
[JPA_Basic] JPA persist, find, remove, update (0) | 2023.06.15 |