객체와 테이블 매핑
@Entity
- @Entity가 정의되어있는 클래스는 JPA가 관리한다.
- 기본 생성자가 꼭 있어야 한다.
- 속성: name ->JPA에 사용할 엔티티 이름을 지정한다, 기본값 : 클래스 이름을 그대로 사용
@Table
- name, catalog, schema 등등. .
필드와 컬럼 매핑
@Column
데이터베이스 컬럼명을 설정해줄 수 있다.
unique(실무에서 잘 사용하지 않는다 -> 유니크 제약조건 이름을 설정할 수 없다 대신 @Table(uniqueCons.. 사용), length 등 설정할 수 있다.
@Temporal
날짜 타입 매핑
하지만 LocalDate, LocalDateTime을 사용할 때는 생략 가능하다.
@Enumerated
enum 타입 매핑
default가 ORDINAL 인데 enum 순서를 데이터베이스에 저장한다 ( 사용X -> 순서가 변경되어도 이전 데이터는 변경이 안되어서 문제 발생 )
EnumType.STRING 은 enum 이름을 데이터베이스에 저장한다 (이것을 사용)
@Lob
BLOB, CLOB 매핑
@Transient
특정 필드를 컬럼에 매핑하지 않음 (매핑 무시)
메모리상 로직에만 사용하고 싶을때 사용한다.
기본 키 매핑
@Id
- 직접 할당할 경우 @Id
- 자동 생성시 (@GeneratedValue) 추가한다.
- strategy = GenerationType.AUTO - 방언에 따라 자동 지정, 기본값
- strategy = GenerationType.IDENTITY - 기본 키 생성을 데이터베이스에 위임한다. (MYSQL)
DB에 insert를 해봐야 id값을 알 수 없다. 그래서 예외적으로 persist 할 때 바로 쿼리를 날린다. ( 원래는 트랜젝션시에 쿼리가 날라감 ) -> id 값 알 수 있음
- strategy = GenerationType.SEQUENCE - 데이터베이스 스퀀스 오브젝트 사용 @SequenceGenerator 필요 (ORACLE)
- strategy = GenerationType.TABLE - 키 생성용 테이블 사용 @TableGenerator 필요 (모든 DB) -> 성능이 별로...
-> 권장하는 식별자 전략
- 기본 키 제약 조건 : null X, 유일, 변하면 안된다.
- 미래까지 이 조건을 만족하는 자연키는 찾기 어렵기 때문에 대리키(대체키)를 사용한다.
예를 들어 주민등록번호도 기본 키로 적절하지 않다.
권장 : Long형 + 대체키 + 키 생성전략 사용
때에 따라 랜덤값, UUID 를 권장
연관관계 매핑 : @ManyToONe, @JoinColumm 등
데이터 베이스 스키마 자동 생성
DDL을 애플리케이션 실행 시점에 자동 생성
테이블 중심에서 -> 객체 중심으로
데이터 베이스 방언을 활용하여 적절하게 DDL을 생성한다
이렇게 생성된 DDL은 개발서버에서만 사용하고 적절하게 다듬어서 운영에서 사용하자.
create > 기존 데이터 삭제 후 다시 생성
create-drop > 기존 데이터 삭제 후 다시 생성 애플리케이션 종료시 테이블 삭제
update > 변경된 부분만 수정 (alter) , 추가하는것 만 가능
validate > 엔티티와 테이블이 정상매핑되었는지 확인해준다.
none > 사용하지 않음
운영 장비에는 절대 create, create-drop, update 사용하면 안된다.
개발 초기 -> create or update
테스트 서버 -> update or validate
스테이징과 운영 서버 -> validate or none
--> 로컬PC 외에는 none or validate 만 사용하고 테이블 수정은 직접한다.
'WEB > JPA' 카테고리의 다른 글
5. 자바 ORM 표준 JPA 프로그래밍 - 다양한 연관관계 매핑 (0) | 2021.05.14 |
---|---|
4. 자바 ORM 표준 JPA 프로그래밍 - 연관관계 (0) | 2021.05.14 |
2. 자바 ORM 표준 JPA 프로그래밍 - 내부 동작 방식 (0) | 2021.05.13 |
1. 자바 ORM 표준 JPA 프로그래밍 - 간단한 실습 (0) | 2021.05.13 |
0. 자바 ORM 표준 JPA 프로그래밍 - 기본편 (0) | 2021.05.11 |