본문 바로가기
Spring Study/JPA 기본

[JPA] 엔티티 매핑 (Entity Mapping)

by 정재인 2023. 10. 17.

엔티티 매핑 종류

· 객체와 테이블 매핑: @Entity, @Table

· 필드와 컬럼 매핑: @Column

· 기본 키 매핑: @Id

· 연관관계 매핑: @ManyToOne, @JoinColumn

 

객체와 테이블 매핑

@Entity

· @Entity가 붙은 클래스는 JPA가 관리, 엔티티라 한다.

· JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 필수

· 기본 생성자 필수(파라미터가 없는 public 또는 protected 생성자)

· final 클래스, enum, interface, inner 클래스 사용 X

· 저장할 필드에 final 사용 X

속성

· name

- JPA에서 사용할 엔티티 이름 지정

- 기본값: 클래스 이름을 그대로 사용

- 같은 클래스 이름이 없으면 가급적 기본값 사용

 

@Table

· @Table은 엔티티와 매핑할 테이블 지정

속성

name: 매핑할 테이블 이름

catalog: 데이터베이스 catalog 매핑

schema: 데이터베이스 schema 매핑

uniqueConstraints: DDL 생성 시에 유니크 제약 조건 생성

 

데이터베이스 스키마 자동 생성

· DDL을 어플리케이션 실행 시점에 자동 생서

· 테이블 중심 → 객체 중심

· 데이터베이스 방언을 활용해서 데이터베이스에 맞는 적절한 DDL 생성

· 이렇게 생성된 DDL은 개발 장비에서만 사용

속성

create: 기존 테이블 삭제 후 다시 생성

create-drop: create와 같으나 종료시점에 테이블 DROP

update: 변경분만 반영(운영 DB에서 사용 X)

validate: 엔티티와 테이블이 정상 매핑되었는지만 확인

none: 사용하지 않음

 


필드와 컬럼 매핑

package hellojpa;

import javax.persistence.*;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Date;

@Entity
public class Member {

    @Id
    private Long id;

    @Column(name = "name")
    private String username;
    
    private Integer age;
    
    @Enumerated(EnumType.STRING)
    private RoleType roleType;

    @Temporal(TemporalType.TIMESTAMP)
    private Date createdDate;
    
    @Temporal(TemporalType.TIMESTAMP)
    private Date lastModifiedDate;

    @Lob
    private String description;
    
    //Getter, Setter...
}

 

매핑 어노테이션 정리

· @Column: 컬럼 매핑

· @Temporal: 날짜 타입 매핑

· @Enumerated: enum 타입 매핑

- EnumType.ORDINAL: enum 순서를 데이터베이스에 저장

- EnumType.STRING: enum 이름을 데이터베이스에 저장

· @Lob: BLOB, CLOB 매핑

· @Transient: 특정 필드를 컬럼에 매핑하지 않음(매핑 무시)

 

기본 키 매핑 어노테이션

· @Id

· @GeneratedValue

@Id @GeneratedValue(strategy = GenerationType.AUTO)
private Long id;

 

기본 키 매핑 방법

· 직접 할당: @Id 사용

· 자동 생성(@GeneratedValue)

- IDENTITY: 데이터베이스에 위임, MYSQL

- TABLE: 키 생성용 테이블 사용, 모든 DB에서 사용

- AUTO: 방언에 따라 자동 지정, 기본 값

 

권장하는 식별자 전략

· 기본 키 제약 조건: null 아님, 유일, 변하면 안된다.

· 미래까지 이 조건을 만족하는 자연키는 찾기 어렵다. 대리키를 사용한다.

· 권장: Long형 + 대체키 + 키 생성전략 사용

 

 

'Spring Study > JPA 기본' 카테고리의 다른 글

[JPA] 고급 매핑  (0) 2023.10.31
[JPA] 다양한 연관관계 매핑  (0) 2023.10.30
[JPA] 연관관계 매핑  (0) 2023.10.18
[JPA] 영속성 관리  (0) 2023.10.17
[JPA] JPA 기본 개념  (1) 2023.10.14

댓글