@Entity
- JPA를 사용해서 테이블과 매핑할 클래슨는 @Entity 필수( 기본 생성자 필수 )
데이터베이스 스키마 자동 생성
- create 기존테이블 삭제 후 다시 생성(DROP + CREATE)
- create-drop create와 같으나 종료시점에 테이블 drop
- update 변경분만 반영
- validate 엔티티와 테이블이 정상 매핑되었는지만 확인
- none 사용하지 않음(주석처리)
결과>> 기존 테이블을 drop하고 다시 create한다.
매핑 어노테이션 정리
- @Column 컬럼 매핑
- @Temporal 날짜 타입 매핑 : LocalDate, LocalDateTime 사용 시 생략 가능
- @Enumerated enum 타입 매핑 : ORDINAL, STRING이 있는데 ORDINAL은 사용 X
- @Lob BLOB, CLOB매핑
- @Transient 특정 필드를 컬럼에 매핑하지 않음(매핑 무시)
기본 키 매핑
- @Id (직접 할당)
- @GeneratedValue(자동 생성)
- IDENTITY 데이터베이스에 위임 (MYSQL 등)
- SEQUENCE 데이터베이스 시퀀스 오브젝트 사용 (ORACLE 등)
- TABLE 키 생성용 테이블 사용, 모든 DB에서 사용
- AUTO 기본 값
IDENTITY 전략
- 기본 키 생성을 데이터베이스에 위임(MySQL의 AUTO_INCREMENT)
- em.persist() 시점에 즉시 INSERT SQL 실행
- 영속성 컨텍스트의 값을 알 수 있다.
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
System.out.println("====================");
em.persist(member);
System.out.println("member.id = " + member.getId());
System.out.println("====================");
결과>>
SEQUENCE 전략
@Entity
@SequenceGenerator(
name = "MEMBER_SEQ_GENERATOR",
sequenceName = "MEMBER_SEQ", //매핑할 데이터베이스 시퀀스 이름
initialValue = 1, allocationSize = 1)
public class Member {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE,
generator = "MEMBER_SEQ_GENERATOR")
private Long id;
- name 식별자 생성기 이름
- sequenceName 데이터베이스에 등록되어 있는 시퀀스 이름
- allocationSize 시퀀스 한 번 호출에 증가하는 수(기본 값 50)
- catalog, schema 데이터베이스 catalog, schema 이름
System.out.println("====================");
em.persist(member);
System.out.println("====================");
결과>>
DB에 생성한 MEMBER_SEQ에서 다음 값을 호출 한 뒤 ID에 값을 넣어준다.
ID에 값을 넣으면 영속성 컨텍스트에 저장한다.
allocationSize에 관해서 (기본값은 50)
em.persist를 이용해서 저장할 때마다 call next 로 가져오면 성능문제를 가져올 수 있는데
이미 50개사이즈를 DB에 올려놓고 메모리에서 1씩 쓰는 방법이다.
만약 50개 다쓰면 next call로 50개 더 가져와서 메모리에서 사용하는 방식
결과>>
TABLE 전략
- 모든 데이터베이스에서 적용 가능하지만 성능면에서 단점이 있다.
권장하는 식별자 전략
- AUTO_INCREMENT or SEQUENCE 권장
'JPA' 카테고리의 다른 글
[JPA] 지연 로딩과 즉시 로딩 (2) | 2021.01.09 |
---|---|
[JPA] 프록시란? (0) | 2020.12.23 |
상속관계 매핑 (0) | 2020.12.22 |
연관관계 매핑 (0) | 2020.12.22 |
영속성 관리 (1) | 2020.12.21 |