본문 바로가기
코딩 공부/web & Java

[JPA] @GeneratedValue의 GenerationType에 AUTO, IDENTITY 차이

by 현장 2024. 10. 17.

@GeneratedValue(strategy = GenerationType.AUTO)

@Table(name = "question_board")
@Entity
public class QuestionBoard {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
	
    // 생략
}

Default로 동작되는 설정으로 DB 벤더에 따라 자동으로 3가지 전략 중 하나를 선택합니다. DB 벤더를 변경해도 전략을 수정하지 않아도 되지만, SEQUENCE나 TABLE 전략을 선택한다면 sequence나 키 테이블을 생성해두어야 함을 주의해야 합니다. 그러나 JPA ddl-auto 기능을 사용하면 hibernate가 알아서 시퀀스 테이블을 생성해 줍니다.

@GeneratedValue(strategy = GenerationType.IDENTITY)

@Table(name = "question_board")
@Entity
public class QuestionBoard {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
	
    // 생략
}

insert 쿼리가 pk 값 없이 수행되며 위와같이 데이터베이스의 auto_increment 동작이 수행됩니다.

-- auto-generated definition
create table question_board
(
    id bigint auto_increment primary key,
	-- 생략
);

ddl-auto: create 설정을 사용중이라면 위 SQL같이 pk 옵션이 auto_increment로 생성합니다.

📖 Reference

newwisdom's log

Developer RyanKim