객체와 테이블 매핑
@Entity
JPA가 관리하는 Entity 객체
- 주의사항
- **기본 생성자 필수!**
- final class, enum, interface, inner class 에서는 사용 불가
- 저장할 필드에 final 사용 ❌
@Table
Entity와 매핑할 테이블 지정
@Entity
//name: 매핑할 테이블 이름
@Table(name = "")
public class className() {
...
}
@Entity
//catalog: DB catalog 매핑
@Table(catalog = "")
public class className() {
...
}
@Entity
//schema: DB Schema 매핑
@Table(schema = "")
public class className() {
...
}
@Entity
//uniqueConstraints: DDL 생성 시, 유니크 제약 조건
@Table(uniqueConstraints = "")
public class className() {
...
}
매핑 @애너테이션
- @Column
- 컬럼 매핑(컬럼의 이름 설정)
- 속성들
- //컬럼의 이름 @Column(name = "name") //등록 가능 여부 @Column(insertable = True|False) //변경 가능 여부 @Column(updatable = True|False) //null값 허용 여부 (DDL) //False ➡️ not null @Column(nullable = True|False) //unique 제약 조건(DDL) @Column(unique = "") //DB 컬럼 정보(DDL) @Column(columnDefinition = "") //문자 길이 제약(DDL) String 타입에만 사용 가능 @Column(length = 10) //BigDecimal 사용(DDL) @Column(precision|scale )
- @Temporal
- 날짜 타입 매핑
- @Enumerated
- enum 타입 매핑
//Default(사용 안하는걸 권장) //enum 순서를 DB에 저장 @Enumerated(EnumType.ORDINAL) //String 사용을 권장 //Enum 이름을 DB에 저장 @EnumType(EnumType.STRING)
- ORDINAL을 사용하면 안되는 이유
- enum의 값의 순서에 따라 DB에는 0, 1, 2... 등 숫자로 저장된다.
- 만약, 이후 새로운 Enum 값이 추가 될 경우, 기존의 0, 1, 2 값들과 새로운 Enum값이 꼬일 수 있다.
- **STRING을 사용하자!**
- @Lob
- BLOB, CLOB 매핑
- @Transient
- 매핑 ❌
기본 키 매핑
@Id
- @GeneratedValue
- ID값을 자동으로 할당할 경우 사용
- 속성들
- IDENTITY: 데이터베이스에 위임
- SEQUENCE: DB 시퀀스 오브젝트 사용
- TABLE: 키 생성용 테이블 사용
- AUTO: 방언에 따라 자동 지정(DEFAULT)
@Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Id @GeneratedValue(strategy = GenerationType.SEQUENCE) ...
DB 스키마 자동 생성
- DDL을 애플리케이션 실행 시점에 자동 생성
- 테이블 중심 ➡️ 객체 중심
- DB 방언 고려 ➡️ DB에 적절한 DDL 생성
- 생성된 DDL ➡️ 개발 환경에서만 사용
스키마 자동 생성 속성
hinernate.hbm2ddl.auto
- create (DROP+CREATE)
- 기존 테이블 삭제 + 다시 생성
- **운영환경에서는 사용 ❌**
<property name="hiberante.hbm2ddl.auto" value="create"></property>
- create-drop
- 1.create + 종료 시점에 테이블 DROP
- **운영환경에서는 사용 ❌**
<property name="hiberante.hbm2ddl.auto" value="create-drop"></property>
- update
- 변경분만 반영
- **운영환경에서는 사용 ❌**
<property name="hiberante.hbm2ddl.auto" value="update"></property>
- validate
- Entity와 Table이 정상 매핑되었는지만 확인
<property name="hiberante.hbm2ddl.auto" value="validate"></property>
- none
- 사용하지 않음
<property name="hiberante.hbm2ddl.auto" value="none"></property>
주의(중요)
- 운영 장비에는 절대 Create, create-drop, update 설정 사용 ❌❌
- 개발 초기 : create | update
- 테스트 서버 : update | validate
- **운영 환경 : validate | none**
강의
https://www.inflearn.com/course/lecture?courseSlug=ORM-JPA-Basic
'JPA' 카테고리의 다른 글
[JPQL] 페치 조인 - Fetch Join! (JPA의 N+1 문제 해결법) (0) | 2024.03.10 |
---|---|
JPQL의 내장함수와 사용자 정의 함수 (0) | 2024.03.10 |
[JPA+Spring] 개발 할 때, 신경써야할 체크리스트 (0) | 2023.06.20 |
[JPA] Named Query - 쿼리를 함수처럼 만들어보자 (0) | 2023.06.01 |
[JPA] 경로 표현 (0) | 2023.05.29 |