코드랩 프로젝트 같은 경우엔 JPA를 사용할 때 MYSQL로 사용 했기에 ID 값을 만들 때는 보통 아래와 같이
만들어서 사용했다
@Entity @Getter @NoArgsConstructor(access = PROTECTED) public class Study { @Id @GeneratedValue(strategy = IDENTITY) private Long id; private String name; } ```
기본키를 매핑하는 방법은 2가지로 직접 할당과 자동생성이 있다.
직접 할당
자동생성
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 공부가 더 필요한걸 다시 깨닫는거 같다..