관리 메뉴

웹개발 블로그

[JPA] 💡기본키, 시퀀스 어노테이션 (설정) 본문

◆ ORM/JPA - 중요

[JPA] 💡기본키, 시퀀스 어노테이션 (설정)

쿠키린 2024. 7. 31. 01:23
@Entity
@SequenceGenerator(name="MEMBER_SEQ_GENERATOR",
                    sequenceName = "MEMBER_SEQ",
                    initialValue = 1,   // initialValue : 기본값 1
                    allocationSize = 1) // allocationSize :기본값 50
public class MemberPK {

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator ="MEMBER_SEQ_GENERATOR" )
    private Long id;
    //💥웬만하면 String < Integer < Long을 사용하자, 나중에 타입변경하는 게 더 힘들고, 요새 성능이 좋아서 Long 타입으로 해도 괜춘!

시퀀스 설정

@SequenceGenrator를 사용하면 테이블마다 시퀀스를 따로 관리할 수 있다

(명시해주지 않으면 기본 hibernate_sequence를 사용하게 된다)

어노테이션

@SequenceGenerator(name="MEMBER_SEQ_GENERATOR",
                    sequenceName = "MEMBER_SEQ",
                    initialValue = 1,   // initialValue : 기본값 1
                    allocationSize = 1) // allocationSize :기본값 50 (시퀀스 한번 호출에 증가하는 수, 성능 최적화에 사용된다. 기본 50으로 하는게 적절하다)

public class MemberPK {

@Id 

@GeneratedValue(strategy = GenerationType.SEQUENCE, generator ="MEMBER_SEQ_GENERATOR" )

 private Long id;

}

SQL문으로 작성한다면? 아래와 위는  같은 결과이다.

create sequence member_seq start with 1 increment by 1

기본키 설정

@Id : 직접할당

@GenerateValue : 자동생성

 

@GeneratedValue(strategy = GenerationType.옵션)

[ AUTO ]

@GeneratedValue(strategy = GenerationType.AUTO) 가 기본( 방언(현재 DB) 에 따라 자동 지정됨)

-> @GeneratedValue만 써도 됨

 

[ IDENTITY ]

@GeneratedValue(strategy = GenerationType. IDENTITY )

  • MySQL, PostgreSQL, SQL Server, DB2에서 사용
  • em.persist() 시점에 즉시 INSERT SQL 실행 하고 DB에서 식별자를 조회

 

기본키 선택 전략

  • 기본 키 제약 조건 : null 아님, 유일, 변하면 x
  • 미래까지 만족해야함 - 대리키를 사용하자
  • 권장 : Long형 + 대체키 or 회사에서 정해준 규칙을 활용해서 기본키를 지정하자