JPA 기본 키 자동 생성 전략 (@GeneratedValue)
JPA에서 기본 키를 자동 생성하려면 @GeneratedValue 애너테이션을 사용하며, 다음 네 가지 전략을 선택할 수 있습니다.
1. IDENTITY
데이터베이스의 AUTO_INCREMENT 기능을 사용하여 기본 키를 자동 생성
주로 MySQL, PostgreSQL 등에서 사용
즉시 INSERT가 발생해야 ID를 알 수 있어 영속성 컨텍스트의 배치(batch) 처리 기능이 제한됨
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
2. SEQUENCE
데이터베이스의 시퀀스 객체를 사용하여 기본 키를 생성
주로 Oracle, PostgreSQL, H2 등에서 사용
@SequenceGenerator를 함께 사용하여 시퀀스 이름, 초기값, 증가값 등을 설정 가능
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "my_seq_gen")
@SequenceGenerator(name = "my_seq_gen", sequenceName = "my_sequence", allocationSize = 1)
private Long id;
3. TABLE
별도의 키 생성 테이블을 만들어 기본 키 값을 관리
데이터베이스 독립성이 높지만 성능이 상대적으로 낮음
@Id
@GeneratedValue(strategy = GenerationType.TABLE, generator = "my_table_gen")
@TableGenerator(name = "my_table_gen", table = "id_generator", pkColumnName = "gen_name", valueColumnName = "gen_value", pkColumnValue = "entity_id", allocationSize = 1)
private Long id;
4. AUTO (기본값)
JPA가 사용하는 데이터베이스에 맞춰 자동으로 적절한 전략을 선택
MySQL이면 IDENTITY, Oracle이면 SEQUENCE 등으로 자동 적용됨
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
정리
IDENTITY: 데이터베이스의 AUTO_INCREMENT 사용 (MySQL)
SEQUENCE: 데이터베이스 시퀀스를 사용 (Oracle, PostgreSQL)
TABLE: 키 생성 테이블을 사용 (데이터베이스 독립성↑, 성능↓)
AUTO: 데이터베이스에 따라 자동 선택
어떤 전략을 사용할지는 사용하는 데이터베이스와 성능 요구사항에 따라 결정해야 합니다.
'프로그래밍 > spring' 카테고리의 다른 글
Spring 컨테이너에 등록된 빈(Bean)은 싱글톤 스코프이다 (0) | 2025.04.09 |
---|---|
SpringBoot 프로젝트 생성하기 (0) | 2023.07.21 |
Springboot에서 jsp 설정하기 (0) | 2023.07.04 |
프로세스 중단 방법 (0) | 2023.05.17 |
[ 스프링부트 ] @Alias 어노테이션(type-aliases-package 설정) 사용해서 xml파일에 패키지명을 명시하지 않고 bean 사용하기 (0) | 2023.02.18 |