Hyemi Lee

Hyemi Lee

주니어 개발자의 삽질과 기록

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:

Share on

Twitter Facebook LinkedIn

You may also enjoy

Redis Stream

2021年04月28日

Stream Stream은 로그 데이터를 처리하게위해 5.0에서 새로 도입된 데이터 타입입니다. 대량의 데이터가 연속적으로 발생할때 처리하기 위해 등장했습니다. 기존 데이터를 수정하지 않고 오직 추가로 발생합니다. 이런 종류의 데이터를 stream or log데이터...

Study, Object, chapter2&3 presentation

2021年04月20日

chapter03. 역할, 책임, 협력 객체지향 설계란, 올바른 객체에게 올바른 책임을 할당하면서 낮은 결합도와 높은 응집도를 가진 구조를 창조하는 활동이다.

Spring, chatting 프로그램 만들기, Reactive란?

2020年06月16日

Reactive 막힘없이 흘러다니는 data(event)를 통해 사용자에게 자연스러운 응답을 주고 규모 탄력적으로 리소스를 사용하며 실패에 있어서 유연하게 대처한다 모든 지점에서 블럭 되지 않게 하자 oop와 같은 패러다임 모든 것을 비동기적인 data의 strea...