객체와 테이블, 필드와 컬럼 매핑하는 방법을 이해하자.

인프런 강의 참고

[들어가기 전] JPA에서 중요한 것!

  1. 영속성 컨텍스트, JPA 내부 동작 등의 매커니즘 측면
    • JPA가 내부적으로 어떤 매커니즘으로 동작하는지.
  2. 설계 측면
    • 객체와 RDB를 어떻게 매핑해서 사용하는지.

엔티티 매핑

객체와 테이블 매핑

@Entity

@Table


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

<property name="hibernate.hbm2ddl.auto" value="create"/>
옵션 설명
create 기존 테이블 삭제 후 다시 생성 (DROP + CREATE)
create-drop create와 같으나 종료 시점에 테이블 DROP (테스트에서 사용하면 도움됨)
update 변경 분만 반영 (운영 DB에서는 사용하면 안됨) alter table ~
validate 엔티티와 테이블이 정상 매핑되었는지만 확인
none 아무 속성도 사용하지 않음

DDL 생성 기능


필드와 컬럼 매핑

요구 사항 추가

  1. 회원은 일반 회원과 관리자로 구분해야 한다.
  2. 회원 가입일과 수정일이 있어야 한다.
  3. 회원을 설명할 수 있는 필드가 있어야 한다. 이 필드는 길이 제한이 없다.
public enum RoleType {
  USER, ADMIN
}
@Entity
@Table(name = "MBR")
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 createDate;

  @Temporal(TemporalType.TIMESTAMP)
  private Date lastModifiedDate;

  @Lob
  private String description;

  @Transient
  private int temp;

  public Member() {

  }
}
create table Member (
  id bigint not null,
  age integer,
  createdDate timestamp,
  description clob,
  lastModifiedDate timestamp,
  roleType varchar(255),
  name varchar(255),
  primary key (id)
)

@Id

@Column

@Enumerated

@Target({ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Enumerated {
    EnumType value() default EnumType.ORDINAL;
}
public enum EnumType {
    ORDINAL, STRING;
    private EnumType() { }
}

@Temporal

@Lob

@Transient


관련된 Post

Reference