객체와 테이블 맵핑 & 데이터베이스 스키마 자동생성

최연재·2022년 7월 6일
0

JPA

목록 보기
4/11
  • 객체와 테이블 맵핑
  • 데이터베이스 스키마 자동생성

1. 객체와 테이블 맵핑

  1. @Entity
  • @Entity가 붙은 클래스는 JPA가 관리
  • JPA를 사용해서 테이블과 맵핑할 클래스는 @Entity가 필수
  • 속성 : name
    - JPA에서 사용할 엔티티 이름을 지정
    - 기본값 = 클래스 이름
    - 가급적이면 기본값 사용
  • 주의
    1. 기본 생성자 필수(일단은 스펙상 그렇다고 알아두기)
    2. final 클래스, enum, interface, inner 클래스 사용X
    3. 저장할 필드에 final 사용X
  1. @Table
  • @Table은 엔티티와 맵핑할 테이블 지정
  • 속성
    1. name
    - 맵핑할 테이블 이름
    - 기본값 = 엔티티 이름을 사용
    2. catalog
    - 데이터베이스 catalog 맵핑
    3. schema
    - 데이터베이스 schema 맵핑
    4. uniqueConstraints(DDL)
    - DDL 생성 시에 유니크 제약 조건 생성

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

  1. 정의
  • DDL(Data Definition Language, 데이터 정의어)을 애플리케이션 실행 시점에 자동 생성
  • 테이블 중심 -> 객체 중심
  • 각 데이터베이스의 특성에 맞는 적절한 DDL 생성
  1. 속성 - <property name="hibernate.hbm2ddl.auto" value="create"/> 이용
    (1) create
    - 기존테이블 삭제 후 다시 생성(DROP + CREATE)
    (2) create-drop
    - create와 같으나 종료시점에 테이블DROP
    (3) update
    - 변경된 것만 반영
    - 추가하는것만 되고 지우는거는 안됨 -> 테이블 컬럼 날라가면 큰일나기 때문
    (4) validate
    - 엔티티와 테이블이 정상 맵핑되었는지만 확인
    (5) none
    - 사용안하기
    - 주석과 같음
    - 사실 'none'이 아닌 아무거나('asdf')를 적는것과 같음
  2. DDL 생성 기능
  • 제약 조건 추가
    - @Column(unique=true, nullable=false, length=10)
  • @Table(name="MBR")와 같은 것은 런타임에 영향을 주는데 반해, DDL 생성 기능은 DDL을 자동 생성할 때만 사용되고 JPA의 실행 로직에는 영향을 주지 않음
  1. 주의 사항
    1. 운영 장비에서는 create, create-drop, update 속성을 사용하면 안됨!!!
    2. 그냥 개발 서버랑 테스트 서버에서 validate정도만 쓰고, 안쓰는게 나음

이 글은 김영한님의 '자바 ORM 표준 JPA 프로그래밍 - 기본편'을 수강하고 정리한 내용입니다.

profile
가보자고

0개의 댓글