[SEB BE] Section 3. JPA 엔티티 매핑

박두팔이·2023년 2월 24일
0

스프링프레임워크

목록 보기
10/17

엔티티 - 테이블 매핑

@Entity매핑 애너테이션을 이용해 엔티티 클래스와 테이블을 매핑할 수 있다.

클래스 레벨에 @Entity 애너테이션을 붙이면 JPA 관리 대상 엔티티가 된다.

✅ 엔티티 이름 변경하는 방법

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

// (1) name 애트리뷰트를 설정하지 않으면 기본값으로 클래스 이름을 엔티티 이름으로 사용한다.
@Entity(name = "USERS") 

@Table(name = "USERS") // (2)
public class Member {
    @Id
    private Long memberId;
}
  • @Table은 옵션이다. 그러나 @Entity, @Id 애너테이션은 필수이다.
  • @Entity 애너테이션과 @Id 애너테이션은 함께 사용한다. 만일 @Entity 애너테이션만 추가하고 식별자 역할을 하는 필드에 @Id 애너테이션을 추가하지 않으면 아래와 같은 에러가 발생한다.

Caused by: org.hibernate.AnnotationException: No identifier specified for entity: com.codestates.entity_mapping.single_mapping.Member

  • 중복되는 엔티티 클래스가 없고, 테이블 이름이 클래스 이름과 같을 경우에는 @Entity 애너테이션과 @Table 애너테이션에 name 애트리뷰트를 지정하지 않고, 클래스 이름으로 사용하는게 권장된다.

기본키 매핑

데이터베이스의 테이블설정에서 기본키는 필수다.

JPA에서는 기본적으로 @Id 애너테이션이 붙여진 필드변수가 기본 키 컬럼이 된다. JPA는 기본키를 어떤 방식으로 생성해줄지 다양한 전략을 지원한다.

JPA에서 지원하는 기본키 생성전략

  • 기본키 직접 할당
  • 기본키 자동 생성

1️⃣ 기본키 직접 할당
애플리케이션 코드 상에서 @Id 애너테이션을 통해 해당 멤버필드 변수를 기본키를 직접 할당해주는 방식이다.

@NoArgsConstructor
@Getter
@Entity
public class Member {
    @Id   // (1)
    private Long memberId;

    public Member(Long memberId) {
        this.memberId = memberId;
    }
}

2️⃣ 기본키 자동 생성

⭐️ 아이덴티티(IDENTITY)

  • 기본키생성을 데이터베이스에 위임하는 방식이다.
  • AUTO_INCREMENT기능을 통해 숫자를 자동증가시켜 기본키로 사용하는 방식
  • 멤버 변수에 @GeneratedValue(strategy = GenerationType.IDENTITY)애너테이션 설정을 해주면 된다.
@NoArgsConstructor
@Getter
@Entity
public class Member {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY) //@GeneratedValue 애너테이션의 strategy 애트리뷰트의 값을 GenerationType.IDENTITY로 지정해준다.
    private Long memberId;

    public Member(Long memberId) {
        this.memberId = memberId;
    }
}

시퀸스(SEQUENCE)

  • 데이터베이스에서 제공하는 시퀸스를 사용해서 기본키를 생성하는 전략
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE) 
private Long memberId;

AUTO전략

  • @Id필드에 @GeneratedValue(strategy = GenerationType.AUTO)를 지정하면 JPA가 데이터베이스의 Dialect에 따라서 적절한 전략을 자동으로 선택해준다.

테이블(TABLE)

  • 별도의 키 생성 테이블을 사용하는 전략

profile
기억을 위한 기록 :>

0개의 댓글