본문 바로가기
Spring

Spring JPA @Id 사용시 GenerationType

by wadekang 2023. 12. 5.

 

JPA 엔티티의 식별자(Id)를 생성하는 방법을 지정하는데, 이를 GenerationType이라고 함

GenerationType은 다양한 전략을 제공하여 식별자를 자동으로 생성할 수 있음

 

1. AUTO

  • 기본 값이며, 데이터베이스에 따라 자동으로 식별자를 생성
  • 예를 들어, PostgreSQL에서는 SEQUENCE, MySQL에서는 AUTO_INCREMENT를 사용
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;

 

2. IDENTITY

  • 데이터베이스에 의존하는 자동 증가 식별자를 사용
  • 예를 들어, MySQL의 AUTO_INCREMEN와 같이 사용
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

 

3. SEQUENCE

  • 데이터베이스에서 시퀀스를 사용하여 식별자를 생성
  • 주로 Oracle, PostgreSQL 같은 데이터베이스에서 사용
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private Long id;

 

  • SequenceGenerator를 직접 정의할 때
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "your_sequence_name")
@SequenceGenerator(name = "your_sequence_name", sequenceName = "your_sequence_name", allocationSize = 1)
private Long id;

 

4. TABLE

  • 데이터베이승의 테이블을 사용하여 식별자를 생성
  • 일반적으로 성능 이슈가 있으므로 자주 사용되지 않는다고 함
@Id
@GeneratedValue(strategy = GenerationType.TABLE, generator = "your_table_name")
@TableGenerator(name = "your_table_name", allocationSize = 1)
private Long id;

 

5. NONE

  • JPA가 자동으로 식별자를 생성하지 않도록 지정
  • 수동으로 식별자를 할당하려는 경우에 사용
@Id
@GeneratedValue(strategy = GenerationType.NONE)
private Long id;

 

댓글