[JPA] 기본키 관련

홍건의·2022년 3월 25일
0

JPA 학습

목록 보기
2/11
@Getter
@Entity
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class Bakeries extends BaseEntity {

    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "bakery_id")
    private Long id;
    
    }
}

기본키는 두가지로 나뉜다.
직접할당할거냐, 자동 생성할거냐.

1. 직접할당

기본키를 어플리케이션에서 직접 할당한다.
즉, 내가 직접 값 바인딩해서 jpa한테 넘겨야한다.

@Id

어노테이션만 붙이면 된다.

(1) 자바 기본형
(2) 자바 Wrapper형
(3) String
(4) java.util.Date
(5) java.sql.Date
(6) java.math.BigDecimal
(7) java.math.BigInteger

위의 경우에만 @Id 어노테이션이 적용 가능하다.

2. 자동생성 - IDENTITY 전략

이건 기본키 생성을 DB에 위임한다.
DB가 알아서 생성한다.
굳이 내가 바인딩하지 않는다.

MySQL, PostgreSQL, SQL Server에서 주로 사용.

CREATE TABLE Board (
   ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY
   ...
)

인 DDL이라고 할 때,

DB에 레코드 저장 시 ID 칼럼을 비워두면 알아서 순서대로 채워준다.

이 경우에는

@GeneratedValue(Strategy = GenerationType.IDENTITY) 

라고 기본키 필드 위에 붙인다.

가장 맨 위에 코드 있는 것처럼.

이 외에도 SEQUENCE전략, TABLE전략, AUTO 전략이 존재한다.
이렇게 다양한 이유는 DBMS마다 지원 방식이 다르기 때문.
오라클에서는 시퀀스가 존재하지만 MySQL에서는 없음.

MySQL에서 실제로 기본키는 AUTO_INCREMENT로 지정하는게 성능 측면에서는 바람직한 이유?

23.06.25 작성

mysql DDL로 테이블 정의할 때 auto increment 설정하지 않고, JPA 넘기면 에러발생한다. (결국 Hibernate가 쿼리를 만들어내므로)

이때 쿼리문은 insert문에서 기본키를 뺀 쿼리가 만들어진다.

profile
Backend Developer

0개의 댓글

관련 채용 정보