IT'S DO
728x90
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
 @Id
 @GeneratedValue(strategy=GenerationType.AUTO)
 public Integer gettId() {
  return id;
 }

@GeneratedValue는 주키의 값을 위한 자동 생성 전략을 명시하는데 사용한다. 선택적 속성으로 generator와 strategy가 있다. strategy는 persistence provider가 엔티티의 주키를 생성할 때 사용해야 하는 주키생성 전략을 의미한다. 디폴트 값은 AUTO이다. generator는 SequenceGenerator나 TableGenerator 애노테이션에서 명시된 주키 생성자를 재사용할 때 쓰인다. 디폴트 값은 공백문자("")이다. 

주키 생성 전략으로 JPA가 지원하는 것은 아래의 네 가지이다.
1. AUTO : (persistence provider가) 특정 DB에 맞게 자동 선택
2. IDENTITY : DB의 identity 컬럼을 이용
3. SEQUENCE : DB의 시퀀스 컬럼을 이용
4. TABLE : 유일성이 보장된 데이터베이스 테이블을 이용

 

그냥 흔히 말하는 db query에서 각각의 의미라고 생각하면 됨.

 

* IDENTITY

개념

@GeneratedValue(strategy = GenerationType.IDENTITY)
기본 키 생성을 데이터베이스에 위임
즉, id 값을 null로 하면 DB가 알아서 AUTO_INCREMENT 해준다.
Ex) MySQL, PostgreSQL, SQL Server DB2 등

=> 자동 값 증가

 

 

* SEQUENCE
개념
1. @GeneratedValue(strategy = GenerationType.SEQUNCE)
2. 데이터베이스 Sequence Object를 사용
   2.1 DB Sequence는 유일한 값을 순서대로 생성하는 특별한 데이터베이스 오브젝트
   2.2 테이블 마다 시퀀스 오브젝트를 따로 관리하고 싶으면 @SequenceGenerator에 sequenceName 속성을 추가한다.
3. 즉, DB가 자동으로 숫자를 generate 해준다.
   3.1 Ex) Oracle, PostgreSQL, DB2, H2 등

4. @SequenceGenerator 필요

 

example)
@Entity
@SequenceGenerator(
  name = "MEMBER_SEQ_GENERATOR", 
  sequenceName = "MEMBER_SEQ", // 매핑할 데이터베이스 시퀀스 이름 
  initialValue = 1,
  allocationSize = 1)
public class Member {
  @Id
  @GeneratedValue(strategy = GenerationType.SEQUENCE,
                  generator = "MEMBER_SEQ_GENERATOR")
  private Long id; 
}
// 1부터 시작해서 1씩 증가 
create sequence MEMBER_SEQ start with 1 increment by 1


 

출처: https://jsaver.tistory.com/entry/Id와-GeneratedValue-애노테이션 [빗소리들으면서 개발하기..:티스토리]

 

@Id와 @GeneratedValue 애노테이션

출처 : http://younghoe.info/456 @Id는 해당 프로퍼티가 테이블의 주키(primary key) 역할을 한다는 것을 나타낸다. 속성에 직접 @Id를 붙여주면 실행시점에 객체의 필드를 통해 직접 접근하게 하는 것이며,

jsaver.tistory.com

 

각각의 기능들 잘 나와 있는 자료

 

출처 : https://gmlwjd9405.github.io/2019/08/12/primary-key-mapping.html

 

[JPA] 기본키(PK) 매핑 방법 및 생성 전략 - Heee's Development Blog

Step by step goes a long way.

gmlwjd9405.github.io

 

profile

IT'S DO

@멋진놈

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!