Spring, JPA 기본키 매핑

@Id

  • 기본키 할당하는 방법은 직접할당, 자동생성 두가지 방법이 있다.
  • DBMS마다 sequence, auto_increment등 기본키를 자동생성 방법이 다르다
  • Spring Data JPA는 이를 해결하기 위해 4가지 자동 생성 방법을 제공한다.

기본키 자동생성 방법

IDENTITY

  • 기본 키 생성을 DB에 위임하는 방법(DB에 의존적)
  • MySQL, PostgresSQL, SQL Server, DB2

SEQUENCE

  • DB 시퀀스를 사용해서 기본 키를 할당하는 방법 (DB에 의존적)
  • 주로 시퀀스를 지원하는 Oracle, PostgresSQL, DB2, H2에서 사용
  • @SequenceGenerator를 사용하여 시퀀스 생성기를 등록하고, 실제 db에 생성될 시퀀스이름을 지정해줘야 한다

TABLE

  • 키 생성 테이블을 사용하는 방법
  • 키 생성 전용 테이블을 하나 만들고 여기에 이름과 값으로 사용할 컬럼을 만드는 방법
  • 테이블을 사용하므로, DBMS종류에 상관없이 모든 DBMS에 적용가능

AUTO

  • DBMS에 의존하지 않고 기본키를 할당하는 방법
  • DBMS에 따라 위의 세가지 방법 중 하나를 자동으로 선택해준다
// lombok의 어노테이션
@Getter // 클래스 내 모든 필드의 Getter 메소드를 자동생성
@NoArgsConstructor // 파라메터 없는 기본 생성자 자동추가, entity는 기본생성자가 꼭 있어야 한다

// 테이블과 링크 될 클래스임을 알린다
@Entity
public class Posts extends BaseTimeEntity {
    @Id // pk필드
    @GeneratedValue(strategy = GenerationType.IDENTITY) // pk생성규칙, auto_increment
    private Long id;

    @Column(length = 500, nullable = false)
    private String title;

    @Column(columnDefinition = "TEXT", nullable = false)
    private String content;

    private String author;

    // 해당 클래스의 빌더 패턴 클래스를 생성
    @Builder
    public Posts(String title, String content, String author) {
        this.title = title;
        this.content = content;
        this.author = author;
    }

    public void update(String title, String content) {
        this.title = title;
        this.content = content;
    }
}


Reference

Tags:

Categories:

Updated: