지니의 개발로그
@GeneratedValue 어노테이션의 strategy 옵션 본문
🤔 오늘의 궁금증
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@GeneratedValue 어노테이션을 쓰다가 문득 다른 strategy 옵션이 궁금해졌다.
위 문장이 이해가 안가서 쓰는 글..
📖 @ GeneratedValue 어노테이션
strategy 옵션은 데이터베이스에서 자동으로 ID를 생성하는 방법을 지정한다.
네 가지 주요 방법이 있으며, 각각 데이터베이스가 ID를 생성하는 방식이 다르다.
1. AUTO
- 옵션을 선택하지 않는 경우 디폴트 값
- JPA가 사용 중인 데이터베이스에 따라 자동으로 가장 적절한 방법을 선택
- 예를 들어, MySQL에서는 'IDENTITY', Oracle에서는 'SEQUENCE'을 선택
2. IDENTITY
- 데이터베이스가 직접 ID를 생성하여 번호를 매기는 것
- ID어노테이션으로 기본키를 만들 때 가장 많이 사용 했던 옵션
- 데이터베이스에서 새로 저장되는 데이터마다 자동으로 숫자가 1씩 증가하는 방식으로 ID를 생성
즉, 기본 키가 데이터베이스 행이 삽입될 때 자동으로 증가 - 설정 간단, 자주 사용됨
- 주로 MySQL, SQL Server 등의 데이터베이스에서 사용됨
3. SEQUENCE
- 데이터베이스의 '시퀀스'라는 객체를 사용해서 기본 키 값을 생성
시퀀스 객체는 데이터베이스에서 미리 정의 - ID를 미리 만들어 관리 할 수 있음
- 여러 엔티티에서 동일한 시퀀스를 공유할 수 있음
- 성능 우수
- 주로 Oracle, PostgreSQL 같은 데이터베이스에서 사용
4. TABLE
- 별도의 테이블을 만들어서 ID를 관리
- 모든 데이터베이스에서 사용, 동일하게 동작
- 데이터베이스 독립적
- 다소 복잡하고 성능이 떨어질 수 있음
strategy 옵션을 생략한다면 @GeneratedValue 애너테이션이 지정된 모든 속성에 번호를 차례로 생성하므로 순서가 일정한 고유 번호를 가질 수 없게 된다.
출처 : https://wikidocs.net/161165
이 문장이 이해가 안가는데..
🤔 의문 :
1. strategy 옵션을 생략 한다면 :
- @GeneratedValue(strategy = GenerationType.AUTO)가 적용
- strategy = GenerationType.AUTO는 JPA가 사용 중인 데이터베이스에 따라 적절한 기본 키 생성 전략을 자동 적용
2. @GeneratedValue 어노테이션의 역할 :
- @GeneratedValue 어노테이션은 기본 키로 설정된 필드에 대해 고유한 번호(ID)를 자동으로 생성해주는 역할로,
이 때 기본키로 설정된 필드에는 항상 @Id 어노테이션이 함께 사용된다
3. 모든 속성에 번호를 차례로 생성?
- @GeneratedValue 어노테이션은 단일 필드에만 적용된다.
JPA에서는 엔티티 클래스마다 하나의 기본 키 필드만 가질 수 있으며,
두 개 이상의 여러 필드에 적용하면 오류가 발생 할 수 있다.
💡 정리
- "지정된 모든 속성"이라는 표현에서 @GeneratedValue 어노테이션이 여러 필드에 적용될 수 있는 것인지 헷갈렸다.
하지만 실제로는 기본 키로 지정된 하나의 필드에만 적용되기 때문에
다른 필드에는 이 어노테이션이 적용되지 않고
@GeneratedValue 어노테이션이 적용된 하나의 필드에 대해서만 자동으로 번호가 생성된다. - strategy 옵션을 생략한다면 strategy = GenerationType.AUTO가 기본값으로 적용되어
JPA가 사용 중인 데이터베이스에 따라 적절한 기본 키 생성 전략이 자동으로 적용된다.
예를 들어, MySQL에서는 'IDENTITY', Oracle에서는 'SEQUENCE' 전략을 선택한다.
'Spring Boot' 카테고리의 다른 글
@Column 어노테이션 (0) | 2024.07.12 |
---|---|
@RequiredArgsConstructor 어노테이션? (0) | 2024.06.21 |