개인 공부 (23.07~

[JPA] @GeneratedValue(strategy = GenerationType.IDENTITY)

Song쏭 2023. 10. 30. 16:52
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;

JPA Entity의 기본 키 매핑 전략

5가지가 있다.

 

크게 직접할당과 자동생성으로 나뉘고

 

- 직접할당은

@Id 사용하는 것.

기본키 직접 할당 전략 (@Id만 적용했을 시)

Member member = new Member();
member.setId("1"); //기본키 직접 할당
EntityManager.persist(member);

cf) persist()는 리턴값이 없는 insert이다.

merge()는 리턴값이 없는 update이다.

save는 리턴값이 있는 insert, update이다.

 

save 메서드를 호출하면

새로운 entity이면 persist()를 그렇지 않으면 merge()를 호출한다.

 

 

- 자동생성은

@Id를 사용하면서

 

@GeneratedValue(strategy = GenerationType.IDENTITY)

@GeneratedValue(strategy =  GenerationType.SEQUENCE)

@GeneratedValue(strategy =  GenerationType.TABLE)

@GeneratedValue(strategy =  GenerationType.AUTO) 중 하나를 사용하는 것이다. 

자동 생성 전략이 다양한 이유는 DB마다 지원하는 방법이 다르기 때문이다.

 

대리키 사용 방식

IDENTITY : 기본키 생성을 DB에 위임한다.
SEQUENCE : DB 시퀀스를 사용해서 기본키를 할당한다.
TABLE : 키 생성 테이블을 사용한다.
AUTO : 데이터베이스 방언에 따라 위 전략 IDENTITY, SEQUENCE, TABLE 중 하나를 자동으로 선택한다. (기본값)
(ex) Oracle이면 SEQUENCE, MySQL이면 IDENTITY를 사용한다.)