경주장
엔티티 매핑 본문
객체와 테이블 매핑 :
@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 |