DB에 데이터를 저장할 때 PK값이 꼭 존재해야한다.
물론 이때 PK 값을 직접 넣어 줄 수도 있지만, 대부분의 경우에서는 DB에서 자동으로 생성되게 설정한다.
Spring Data JPA에서 PK값을 자동으로 처리하기 위한 방법을 살펴보자.
GeneratedValue 아노테이션 사용하기
스프링부트에서 PK값을 자동 증가로 설정하기 위해서는, Entity를 정의할 때 PK 필드에 @GeneratedValue
를 붙여주면 된다.
이때 설정할수 있는 전략은 아래와 같은 4가지가 존재한다.
GenerationType.IDENTITY
GenerationType.SEQUENCE
GenerationType.TABLE
GenerationType.Auto
하나씩 살펴보자.
GenerationType.IDENTITY
GenerationType.IDENTITY
는 키 생성을 DB에 완전히 위임하는 방법이다.
- 주로 MySQL 등에서 사용된다.
- 예시
@Entity
@Getter
@Setter
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
int user_id;
String username;
String password;
String role;
}
GenerationType.SEQUENCE
GenerationType.SEQUENCE
는 Sequence
객체를 통해 독자적인 pk값을 차례대로 얻는 방법이다.
이때 Sequence
는 pk 생성을 위한 DB 객체이다.
@SequenceGenerator
아노테이션을 사용해서, 엔티티마다 각각의 시퀀스로 관리할 수 있다.@SequenceGenerator
를 사용하지 않으면, 기본 시퀀스 객체로 pk를 생성한다.
- 주로 Oracle 등에서 사용한다.
- 예시
@Entity
@Getter
@Setter
@SequenceGenerator(
name = "MY_SEQUENCE",
sequenceName = "SEQ",
initialValue = 1,
allocationSize = 1
)
public class User {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE,generator = "MY_SEQUENCE")
int user_id;
String username;
String password;
String role;
}
@SequenceGenerator
pk 생성을 관리할 Sequence
를 생성하는 아노테이션이다.
속성값들은 다음과 같다.
name
: SequenceGenerator의 이름을 설정- 해당 이름을 통해,
Entity
에서 시퀀스를 등록 가능하다.
- 해당 이름을 통해,
sequenceName
: DB에 등록되는 이름을 설정initialValue
: 시퀀스의 시작 지점을 설정한다.allocationSize
: 시퀀스가 증가하는 간격을 설정한다.
이때 name
은 필수로 설정 해 주어야 하고, 나머지 값들은 설정하지 않으면 default값을 가진다.
@GenerationType.TABLE
GenerationType.TABLE
는 키 생성 전용 테이블을 만들어 pk를 관리하는 방법이다.
GenerationType.SEQUENCE
전략과 상당히 유사하다.GenerationType.SEQUENCE
에서는 시퀀스 객체를 사용하여 pk를 관리하는 반면,GenerationType.TABLE
에서는 테이블을 이용하여 pk를 관리한다.
@TableGenerator
를 사용하여 키 생성 전용 테이블을 생성할 수 있다.- 예시
@Entity
@Getter
@Setter
@TableGenerator(
name = "MY_SEQUENCE_TABLE",
table = "my_table",
initialValue = 1,
allocationSize = 1
)
public class User {
@Id
@GeneratedValue(strategy = GenerationType.TABLE,generator = "MY_SEQUENCE_TABLE")
int user_id;
String username;
String password;
String role;
}
@TableGenerator
pk 관리 테이블을 생성하는 어노테이션이다.
속성들은 아래와 같다.
name
: SequenceGenerator의 이름을 설정- 해당 이름을 통해,
Entity
에서 테이블을 등록 가능하다.
- 해당 이름을 통해,
table
: 키 생성 테이블 명pkColumnName
: 시퀀스 컬럼 명valueColumnName
: 시퀀스 값 컬럼 명pkColumnValue
: 키로 사용할 값 이름initialValue
: pk의 시작 지점을 설정한다.allocationSize
: pk가 증가하는 간격을 설정한다.
name
은 필수로 지정해 주어야한다.
GenerationType.Auto
자동으로 키 생성 전략을 설정한다.
- 예시
@Entity
@Getter
@Setter
public class User {
@Id @GeneratedValue(strategy = GenerationType.AUTO)
int user_id;
String username;
String password;
String role;
}
'Back End > Spring && Spring Boot' 카테고리의 다른 글
[Spring Boot] properties 파일에 작성한 변수 Java에서 사용하기 (0) | 2024.06.14 |
---|---|
[Spring Security] 인가 설정을 해줘도, 403 에러 발생하는 원인 (0) | 2024.06.12 |
[Spring Data JPA] Repository 메소드 작성 규칙 (1) | 2024.06.07 |
[Spring/JPA] JPA 개념 (0) | 2024.06.06 |
[Spring Boot] 스프링 부트에서 이미지 저장하기 (0) | 2024.06.05 |