@GeneratedValue
🔑 @GeneratedValue
정의
@GeneratedValue는 JPA에서 기본 키(primary key)를 자동 생성하도록 지정하는 애너테이션이다.@Id와 함께 사용하며, 엔티티 저장 시 식별자 생성 전략을 선택할 수 있다.
🧩 주요 속성
| 속성명 | 기능 |
|---|---|
strategy |
기본 키 생성 전략을 정의한다 |
generator |
특정 시퀀스나 테이블을 사용할 때 생성기 이름을 지정한다 |
🛠 생성 전략
strategy 속성은 4가지 값을 가질 수 있다.
GenerationType.AUTO
- JPA 구현체에 생성 전략을 맡긴다
- 데이터베이스 dialect에 따라 적절한 전략이 자동으로 선택된다
GenerationType.IDENTITY
- 기본 키 생성을 데이터베이스에 위임한다
- MySQL, MariaDB처럼
AUTO_INCREMENT를 지원하는 DB에서 자주 사용한다
GenerationType.SEQUENCE
- 데이터베이스 시퀀스를 사용해 기본 키를 생성한다
- Oracle, PostgreSQL 같은 환경에서 자주 사용한다
GenerationType.TABLE
- 별도 테이블을 만들어 키 값을 관리한다
- 특정 DB 기능에 의존하지 않지만 성능상 불리할 수 있다
🛠 사용 예시
@Entity
@Table(name = "user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "user_seq", nullable = false)
private Integer userSeq;
@Column(name = "id", length = 50, nullable = false)
private String id;
@Column(name = "regist_time", nullable = false)
private LocalDateTime registTime;
@Column(name = "last_login_time")
private LocalDateTime lastLoginTime;
}
MariaDB처럼 AUTO_INCREMENT를 사용하는 환경에서는 IDENTITY 전략을 많이 사용한다.
⚠️ 주의사항
@Id와 함께 사용해야 한다.IDENTITY는 INSERT 시점에 식별자가 생성되므로 배치 처리나 저장 시점 전략에 영향을 줄 수 있다.SEQUENCE는 DB가 시퀀스를 지원해야 한다.TABLE은 범용성이 높지만 성능 측면에서 선호도가 낮다.
📌 정리
@GeneratedValue는 기본 키 자동 생성을 위한 애너테이션이다.strategy를 통해 생성 방식을 제어할 수 있다.- DB 특성과 프로젝트 구조에 맞게 전략을 선택해야 한다.
댓글남기기