🔑 @GeneratedValue

정의

@GeneratedValueJPA에서 기본 키(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 특성과 프로젝트 구조에 맞게 전략을 선택해야 한다.

연결문서

태그: ,

카테고리:

업데이트:

댓글남기기