프로젝트를 만들고, 각 게시글마다 IDENTITY
옵션을 이용하여 Id값을 부여해서 구분하도록 헀다.
첫 번째 게시글의 아이디는 "id":1
, 두 번째는 "id":2
... 이렇게 진행됐었다.
그러나 생성한 게시글들을 모두 지우고 새로운 게시글을 작성했을 때,
해당 게시글이 삭제한 그 다음 id 값이 부여되었다."id":1
에서 시작하는 것이 아닌,
궁금증에 AUTO
옵션으로 바꿔서 했더니 이번엔 랜덤한 아이디 값이 부여되면서 첫 게시글의 id값은 "id":105
가 되고, 이 값에서부터 하나씩 더한 "id":106
이 나왔다.
그리고 Java 프로젝트를 재실행하면 시작 id 값은 또 랜덤하게 변경되었다."id":54
JPA에서 Entity의 Primary Key를 생성하여 주는 기능
Pk로 사용될 Entity의 프로퍼티에 @Id를 선언 후, @GeneratedValue를 선언해준다.
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
(강의에서는 @GeneratedValue의 옵션으로 IDENTITY 을 사용했다.)
DB의 identity 컬럼을 이용
기본 키 생성을 데이터베이스에 위임
Entity를 등록할 때, DB에서 AUTO_INCREAMENT 하여 PK를 생성 후 INSERT 한다.
사용처 : MySQL, PostgresSQL, SQL Server, DB2
@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를 생성
@SequenceGenerator 속성: Sequence 전략 사용 시 @SequenceGenerator을 선언하여 사용
name : 식별자 생성기 이름 (필수)
sequenceName : 데이터베이스에 등록되어 있는 시퀀스 이름
initialValue
allocationSize
catalog, schema : 데이터베이스 catalog, schema 이름
사용처 : Oracle ...
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
기본값으로 DB 방언에 맞춰(특정 DB에 맞게) 자동으로 설정
데이터베이스에 따라 IDENTITY, SEQUENCE, TABLE 방법 중 하나를 자동으로 선택해주는 방법
예시 1 : Oracle일 경우, SEQUENCE를 자동으로 선택해서 사용
@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;
유일성이 보장된 데이터베이스 테이블을 이용
키 생성 테이블을 사용하는 방법
키 생성 전용 테이블을 하나 만들고, 여기에 이름과 값으로 사용할 컬럼을 만든다
테이블을 사용하므로, 데이터베이스 벤더에 상관없이 모든 데이터베이스에 적용 가능
IDENTITY 옵션을 사용할 때 id값이 초기화되지 않았던 이유는
Postman에서 해당 게시글을 삭제해도 해당 게시글을 DB에서 관리하기 때문이었던 것 같다.
참고: [ Spring-Boot ] JPA @GeneratedValue 사용하기
참고: [Spring JPA] @Id와 @GeneratedValue - Primary Key 생성방법