본문 바로가기
Category/Spring

[JPA] @Id 어노테이션과 GeneratedValue 어노테이션

by developer__Y 2023. 12. 3.
기본키(PrimaryKey)를 지정하는 Id 어노테이션

 

JPA 인터페이스를 사용하면서 Entity 구성을 하면 DB상의 하나의 Table이  Entity 객체와 매핑이 되며,

Entity 객체의 인스턴스 하나가 해당 Table의 레코드값이 된다. 

그런데, 이러한 각각의 Entity 인스턴스들을 구분하기위해 유일한 값인 PK를 통해 구분하는데

@Id 어노테이션을 통해 해당 Entity의 속성에 기본키(PK)를 직접 할당 하겠다는 의미이다.

 

@Entity
@Data
public class Board {
@Id 
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String title;
private String content;
}

 

@Entity : Board라는 Table을 Entity로 선언하여 매핑하겠다.

@Data : lombok을 사용하기위한 어노테이션

private id, title , content : Board Table은 다음의 3개의 속성으로 이루어진 테이블이다.

@Id : private Integer id 라는 속성이 해당 테이블의 기본키라고 지정.

 

GeneratedValue

 

JPA에서는 Entity 객체의 인스턴스가 새로 생성될때(DB에 새로운 레코드를 추가할때) Id로 지정한 기본키 값을 자동으로 증가 시켜주는 기능이 있다. 이러한 기능을 사용하기위해 기본키를 설정 (@Id)한뒤, 

GeneratedValue 어노테이션을 통해 레코드가 추가될때마다 기본키를 증가시키며 생성해줄 수 있다.

또한, GeneratedValue를 통해 기본키를 어떤방식으로 생성할지 strategy를 설정해준다.

 

1. IDENTITY

데이터베이스에서 자동으로 기본키를 생성하도록 하는 방식으로 주로 MySQL 데이터베이스에서 사용한다.

IDENTITY 전략을 사용하면 데이터베이스는 기본키에 AUTO_INCREMENT 조건을 설정한다.

레코드가 추가될 때마다 첫번째 레코드 id=1, 두번째 레코드 id=2...로 순차적으로 증가하는 기본키를 생성해준다.

 

2.SEQUENCE

데이터베이스에 시퀀스를 만들어 지정한 규칙에 따라 값이 증가하게 할 수있다.

이러한 전략은 시퀀스를 지원하는 데이터베이스인 Oracle에서 주로 사용한다.

해당 속성으로 사용할 Sequence Object를 생성해서 해당 이름을 어노테이션에 기입해줘야한다.