자바 ORM 표준 JPA 프로그래밍 기본편 - 4. 엔티티 매핑

Updated:

김영한님의 인프런 강의 - 자바 ORM 표준 JPA 프로그래밍 - 기본편
위 강의를 정리한 내용입니다.

I. 객체와 테이블 매핑

@Entity

  • @Entity가 붙은 클래스는 JPA가 관리, 엔티티라 한다.
    • JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 필수
  • 주의
    • 기본 생성자 필수(public 또는 protected)
    • final 클래스, enum, interface, inner 클래스 사용 X
    • 저장할 필드에 final 사용 X

@Table

  • 엔티티와 매핑할 테이블 지정

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

  • persistence.xml<property name="hibernate.hbm2ddl.auto" value="create" /> 추가
  • 옵션
    • create : 기존테이블 삭제 후 다시 생성
    • create-drop : create와 같으나 종료 시점에 drop
    • update : 변경 부분만 반영(추가만)
    • validate : 엔티티와 테이블이 정상 매핑되었는지 확인(에러 반환)
    • none : 사용하지 않음(주석처리와 같음)
  • 주의
    • 운영 장비에는 절대 create, create-drop, update를 사용하면 안된다.
    • 개발 초기 : create, update
    • 테스트 서버 : update, validate
    • 스테이징, 운영 서버 : validate, none
    • 가급적이면 쓰지말자

DDL 생성 기능

  • 제약조건 추가 : 회원 이름은 필수, 10자 초과 X
    • @Column(nullable = false, length = 10)

  • DDL 생성 기능은 DDL을 자동 생성할 때만 사용되고 JPA의 실행 로직에는 영향X

III. 필드와 컬럼 매핑

@Column (기본값)

  • 속성
    • nullable : null 값의 허용 여부. false라면 not null조건
    • unique : 컬럼에 유니크 제약조건. 하지만 이상한 문자로 채워짐
    • columnDefinition : 데이터베이스 컬럼 정보를 직접 줄 수 있다. (데이터베이스 방언)

@Enumerated

  • Enum 타입을 매핑할 때 사용
  • 속성
    • EnumType : 절대로 ORDINAL을 사용하지 말자
      • EnumType.ORDINAL : 해당 enum의 index로 저장
      • EnumType.STRING : 해당 enum을 문자로 저장

@Temporal

  • 날짜 타입을 매핑할 때 사용
  • 하이버네이트 최신 버전에서는 LocalDate, LocalDateTime타입으로 대체하여 쓰이지 않음

@Lob

  • 속성이 없다.
  • 매핑하는 필드가 문자면 CLOB, 나머지는 `BLOB으로 매핑

@Transient

  • 매핑하지 않고자 할 때
  • 주로 메모리상에서 테스트 할 때

III. 기본 키 매핑

기본 키 매핑 방법

  • 직접 할당 : @Id만 사용
  • 자동 생성 : @GeneratedValue 추가
  • strategy 속성
    • GenerationType.IDENTITY : DB에 위임
      • DB단계까지 가야 기본키가 생성되기 때문에, 영속성 컨텍스트내에서는 PK가 없는 오류가 생긴다. 따라서 예외적으로 IDENTITY전략에서는 persist할 때 DB에 일단 적용한다.
    • GenerationType.SEQUENCE : DB에 시퀀스를 생성하고 대입
      • allocationSize : 시퀀스를 한 번 호출할 때 여러개를 한번에 가져와서 call 비용을 절약함
    • GenerationType.TABLE : 키 생성 전용 테이블을 만들어 데이터베이스 시퀀스를 흉내냄

권장하는 식별자 전략

  • 기본 키 제약 조건 : not null, 유일, 불변
  • 미래까지 이 조건을 만족하는 자연키를 찾기 어렵다. 대체키를 이용
  • 권장 : Long형 + 대체키 + 키 생성전략 사용

Leave a comment