개인 공부 (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를 사용한다.)