엔티티 매핑
- 객체와 테이블 매핑
- 필드와 컬럼 매핑
- 기본 키 매핑
- 연관관계 매핑
객체와 테이블 매핑
@Entity
- @Entity가 붙은 클래스는 JPA가 관리하는 엔티티
- 주의
- 기본 생성자가 필수(parameter가 없는 public or protected)
- final class, enum, interface, inner class에는 사용할 수 없다.
- 저장할 필드에 final 키워드를 사용할 수 없다.
데이터베이스 스키마 자동 생성
- DDL을 어플리케이션 실행 시점에 자동 생성(로딩 시점에 create table이 가능)
- DB에 맞는 방언을 사용해서 적절한 DDL 생성
- 이렇게 생성된 DDL은 개발 장비에서만 사용!!
필드와 컬럼 매핑
@Entity
@Table(name = "MBR")
public class Member {
@Id
private Long id;
@Column(name = "name", updatable = false, nullable = false, length = 10, columnDefinition = "varchar(100) default 'EMPTY'")
private String username;
@Column()
private BigDecimal age;
@Enumerated(EnumType.STRING)
private RoleType roleType;
@Temporal(TemporalType.TIMESTAMP)
private Date createDate;
@Temporal(TemporalType.TIMESTAMP)
private Date lastModifiedDate;
@Lob
private String description;
@Transient
private int temp;
protected Member() {
}
}
- @Column()
- name : DB에서 실제 사용할 컬럼명을 설정
- updatable : updatable = false이 되어 있으면 업데이트 쿼리가 날아가지 않음
- nullable : NOT NULL 제약 조건
- columnDefinition = varchar(100) default 'EMPTY', 컬렴을 직접 정의할 수 있음
- @Enumrated()
- Enum타입을 DB와 매핑할때 사용
- EnumType: ORDINAL -> ENUM의 순서대로(0, 1, 2...) 컬럼에 매핑 -> 사용지양
EnumType는 반드시 EnumType.STRING를 사용하는 것이 좋다.
- @Temporal()
- 날짜와 관련된 DB매핑
- TemporalType : 표현방법에 맞게 DATE, TIME, TIMESTAMP 존재하는데 현재는 잘 사용하지 않는다.
- @Lob
- @Transient
- DB매핑과 관계 없이 자바 내 메모리에서만 사용하고 싶을 때
기본 키 매핑