반응형
Entity에서 기본키를 매핑
@Id 만 사용할 경우 직접 할당
@Id
private Long id;
사용 시
Member member = new Member();
member.setId(1L);
member.setUsername("memberA");
// 영속
em.persist(member);
@GenerateValue를 사용하여 자동 할당 가능
Member member = new Member();
member.setUsername("memberA");
// 영속
em.persist(member); // id 자동 생성
4가지 전략이 존재한다.
- IDENTITY
DB에 위임하는 방식 ex) Mysql - AUTO_INCREMENT
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
- SEQUENCE
DB의 SEQUENCE를 이용하는 방식
@SequenceGenerator(
name = "ID_SEQ"
, sequenceName = "ID_SEQ"
, initialValue = 1
, allocationSize = 1
)
public class Member {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "ID_SEQ")
private Long id;
name : Generator의 이름
sequenceName : 실제 DB의 시퀀스 이름
initialValue : DDL 생성시 초기값
* allocationSize : 시퀀스 호출시 증가하는 수
-> allocationSize = 50 설정 시 어플리케이션에서 1~51까지 미리 할당을 받은 후 사용 -> 성능 최적화
- Table
DB의 테이블을 시퀀스 형식으로 사용
@TableGenerator(
name = "ID_SEQ_TABLE"
, table = "ID_SEQ_INFO"
, pkColumnValue = "MEMBER_SEQ"
, initialValue = 1
, allocationSize = 1
)
public class Member {
@Id
@GeneratedValue(strategy = GenerationType.TABLE, generator = "ID_SEQ_TABLE")
name : Generator 이름
table : DB 테이블 이름
pkColumnValue : 테이블 컬럼의 SEQUENCE_NAME의 값
ex)
SEQUENCE_NAME | NEXT_VAL |
MEMBER_SEQ | 1 |
- AUTO
사용 DB에 따라 위의 3가지 중 자동 설정
반응형
'Framework > JPA' 카테고리의 다른 글
[JPA] Proxy 객체 / 지연 로딩(LAZY), 즉시 로딩(EAGER) (0) | 2022.05.13 |
---|