@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long 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
'개발 > JPA' 카테고리의 다른 글
@EntityListeners @MappedSuperClass @CreatedDate @Column(updatable = false) 어노테이션 (0) | 2022.07.21 |
---|---|
jpa envers 테이블 칼럼 열 의미 #REV , #REVTYPE, #Enum (0) | 2022.07.21 |
history Envers로 개발 @Configuration @EnableJpaAuditing (0) | 2022.07.21 |
JPA 나만의 정리 (4) - @ManyToOne , @JoinColumn (0) | 2022.07.21 |
JPA 나만의 정리 (3) - 엔티티(Entity)와 매핑 (0) | 2022.07.21 |