경주장

엔티티 매핑 본문

JPA

엔티티 매핑

달리는치타 2022. 1. 4. 15:54

객체와 테이블 매핑 : 

@Entity, @Table

 

import javax.persistence.Entity;
import javax.persistence.Table;

@Entity @Table
public class Member{ 
...
}

@Entity

- @Entity가 붙은 클래스는 JPA가 관리함

 

@Table

- @Table은 엔티티와 매핑할 테이블 지정

- @Table(name = "DB저장 이름")

 


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

  • DDL을 애플리케이션 실행 시점에 자동 생성
  • 운영서버 사용 X, 개발 장비에서만 사용
  • DB 방언 별로 달라짐

DB schema 자동 생성 속성

resources/META-INF/persistence.xml

<property name="hibernate.hbm2ddl.auto" value="create" />
  • create : 기존 테이블 삭제 후 다시 생성
  • create-drop : create과 같음 + 종료시점에 drop (Test 할때)
  • update : 변경분만 반영 (column 추가 가능, 삭제는 안됨)
  • validate : 엔티티, 테이블 정상 매핑되었는지만 확인
  • node : 사용하지 않음

DB schema 자동 생성 주의

운영 장비에는 절대 create, create-drop, update 사용 x

개발 초기 단계 - create, update

테스트 서버 - update, validate

스테이징, 운영 서버 - validate, none

 

update, alter문이 잘못 나가면 운영서버 몇분간 마비 가능성

계정별로 아예 권한을 두는것이 원칙적인 해결법

 

DDL 생성 기능

@Column


필드와 컬럼 매핑

매핑 어노테이션 정리

hibernate.hbm2ddl.auto 가 체크하는 

Field의 annotation들 

어노테이션 설명

  • @Column 컬럼 매핑
  • @Temporal 날짜 타입 매핑
  • @Enumerated enum 타입 매핑 무조건 @Enumerated(EnumTypes.STRING)으로 사용
  • @Lob BLOB, CLOB 매핑
  • @Transient 특정 필드를 컬럼에 매핑하지 않음(매핑 무시)

기본키 매핑

직접 할당 @Id 

자동 생성 @GeneratedValue 

  • strategy = GenerationType.IDENTITY - 기본 키 생성을 DB에 위임, MYSQL계열 
    • 영속 상태에 넣을때(em.persist(member)) 바로 Insert query를 때려버림 (ID가 있어야 영속성 컨텍스트에서 관리 가능하기 때문)
  • strategy = GenerationType.SEQUENCE- Sequence 오브젝트 사용, ORACLE계열
  • strategy = GenerationType.TABLE- 키 생성용 테이블 사용 (성능 저하)
  • strategy = GenerationType.AUTO- 방언에 따라 자동, 기본값
    • 영속 상태에 넣을때 

기본키 식별자 전략

  • Long 을 사용하자!
  • 자연키 x 대체키 o (비즈니스적으로 의미가 없는 것)
  • 키 생성전략 (AutoIncrement를 쓰자)

 


예제!

요구사항

  • 회원은 상품을 주문 할 수 있다.
  • 주문시 여러 상품을 선택 할 수 있다.

테이블

 

엔티티 설계와 매핑

 

'JPA' 카테고리의 다른 글

값 타입  (0) 2022.01.05
프록시와 연관관계 관리  (0) 2022.01.04
고급 매핑  (0) 2022.01.04
다양한 연관관계 매핑  (0) 2022.01.04
연관관계 매핑 기초  (0) 2022.01.04