JPA 기본키 전략 oracle, mysql

yookyungmin·2023년 6월 20일
0

코드랩 프로젝트 같은 경우엔 JPA를 사용할 때 MYSQL로 사용 했기에 ID 값을 만들 때는 보통 아래와 같이
만들어서 사용했다

@Entity
@Getter
@NoArgsConstructor(access = PROTECTED)
public class Study {
    @Id
    @GeneratedValue(strategy = IDENTITY)
    private Long id;
    private String name;
    }
    ```

기본키를 매핑하는 방법은 2가지로 직접 할당과 자동생성이 있다.

직접 할당

  • 기본키를 애플리케이션에 직접할당한다 @Id를 사용한다

자동생성

  • IDENTITY : 기본키 생성을 DB에 위임한다.
  • SEQUENCE : DB 시퀀스를 사용해서 기본키를 할당한다.
  • TABLE : 키 생성 테이블을 사용한다.
  • AUTO : 선택한 DB에 따라 위 전략 IDENTITY, SEQUENCE, TABLE 중 하나를 자동으로 선택한다. (기본값)

IDENTITY 전략
JPA는 보통 트랜잭션 커밋 시점에 INSERT SQL 실행하는데 이 전략은 DB에 먼저 INSERT SQL을 실행해야 기본키를 알 수 있어서 em.persist() 영속화 되는 시점에 즉시 INSERT SQL 실행하고 DB에서 식별자를 조회하게 된다

오라클을 사용하여 게시판을 만들어보았을 때는 mysql을 사용 한것과는 다르게 했어야 했다.

@Entity
@Getter
@Builder
public class Board extends BaseEntity {
   @Id
   @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "board_seq")
   @SequenceGenerator(name = "board_seq", sequenceName = "board_seq", allocationSize = 1)
   private Long num;
   @Column(length = 500, nullable = false)
   private String title;
   @Lob
   @Column(nullable = false)
   private String content;
   }
   ```

MySQL에서 보통 ID값(primary key)을 autoincrement로 만드는 것처럼 Oracle은 ID값을 주로 Sequence를 통해서 만들게 되는데, JPA Entity에 아래처럼 설정하면 된다.

GeneratedValue annotaion의 generator와 SequenceGenerator annotation의 name 항목이 일치해야 한다.

JPA 공부가 더 필요한걸 다시 깨닫는거 같다..

참고
https://gilchris.tistory.com/37

0개의 댓글