@GeneratedValue란?
-> JPA에서 Entity의 Primary Key를 생성하여 주는 기능이다.
@Id
@GeneratedValue
@Column(name = "member_id")
private Long Id;
위처럼 Pk로 사용될 Entity의 프로퍼티에 @Id를 선언하여 준다음 @GeneratedValue를 선언하여 준다.
@GeneratedValue는 strategy 네 가지 전략을 바꿔 가며 사용할 수 있다.
1. IDENTITY
@GeneratedValue(strategy = GenerationType.IDENTITY)
> 기본 키 생성을 데이터베이스에 위임한다.
Entity를 등록할 때 DB에서 AUTO_INCREAMENT 하여 PK를 생성 후 INSERT 한다.
MySQL, PostgreSQL, 등등
2. SEQUENCE
@SequenceGenerator(
name = "MEMBER_SEQ_GENERATOR",
sequenceName = "MEMBER_SEQ",
initialValue = 1,
allocationSize = 1
)
public class Member {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE,
generator = "MEMBER_SEQ_GENERATOR")
@Column(name = "member_id")
private Long Id;
> DB의 Sequence를 이용하여 PK를 생성한다.
Oracle 등등..
> Sequence 전략 사용 시 @SequenceGenerator을 선언하여 사용한다.
@SequenceGenerator 속성
name : 식별자 생성기 이름 필수
sequenceName : 데이터베이스에 등록되어 있는 시퀀스 이름 hibernate_sequence
initialValue : DDL 생성 시에만 사용됨, 시퀀스 DDL을 생성할 때 처음 1 시작하는 수를 지정한다. 1
allocationSize : 시퀀스 한 번 호출에 증가하는 수 (성능 최적화에 사용), 데이터베이스 시퀀스 값이 하나씩 증가하도록 설정되어 있으면 이 값을 반드시 1로 설정해야 한다. 50
catalog, schema : 데이터베이스 catalog, schema 이름
3.Table
> 키 생성을 위한 테이블을 만들어 마치 Sequence를 사용하는 것처럼 한다.
@TableGenerator을 선언하여 사용한다.
@TableGenerator(
name = "MEMBER_SEQ_GENERATOR",
table = "MEMBER_SEQUENCE",
pkColumnValue = "MEMBER_SEQ",
allocationSize = 1
)
public class Member extends BaseEntity{
@Id
@GeneratedValue(strategy = GenerationType.TABLE,
generator ="MEMBER_SEQ_GENERATOR" )
@Column(name = "member_id")
private Long Id;
4. AUTO
@GeneratedValue(strategy = GenerationType.AUTO)
> 기본값으로 DB 방언에 맞춰 자동으로 설정하여 준다.
'Spring & Spring Boot' 카테고리의 다른 글
[ Spring-Boot ] JPA Embedded 타입 사용하기 (0) | 2021.05.23 |
---|---|
[ Spring-Boot ] JPA Entity 사용하기 (0) | 2021.05.23 |
[ Spring-Boot ] JPA 공통 Entity 만들기 (0) | 2021.05.22 |
[ Spring-Boot ] @Controller 에서 파라미터 받기 (0) | 2021.05.22 |
[ Spring-Boot ] Mybatis DB 커넥션 설정하기 (0) | 2021.05.19 |