엔티티 매핑 종류
· 객체와 테이블 매핑: @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 |
댓글