@Entity 애노테이션이 붙은 클래스는 JPA가 관리하는 엔티티로 JPA를 사용해서 테이블과 매핑할거면 필수로 입력해야 한다.
파라미터가 없는 public 또는 protected 생성자가 필수이며 final 클래스나 ENUM, 인터페이스, Inner 클래스는 엔티티로 등록할 수가 없다. (저장할 필드에 final 사용 x)
@Table 애노테이션은 Entity와 매핑할 테이블을 지정할 수 있다. (기본값 엔티티명)
ddl-auto 기능을 사용하면 DDL(Database Definition Language)을 애플리케이션 실행 시점에 자동으로 적절하게 생성해주는데 개발 단계에서만 사용하고 운영 서버에서는 사용하지 않는 것이 좋다.
- create : 기존 테이블 삭제 후 재생성 (drop + create)
- create-drop : 종료 시점에 테이블 (drop)
- update : 변경부분만 반영
- validate : 엔티티와 테이블 정상 매핑 확인
- none : 사용 x(default)
개발 초기에는 create, update를 사용하고 테스트 서버는 update, validate, 스테이징과 운영 서버는 validate 또는 none을 주로 사용한다. DDL 생성 기능은 DDL을 자동 생성할 때만 사용되고 JPA의 실행 로직에는 영향을 주지 않는다.
필드 매핑 애노테이션
- @Column : 기본 Column
- @Temporal : 날짜 타입 (LocalDate, LocalDateTime 사용 시 생략 가능)
- @Enumerated : ENUM 타입 (기본 설정인 ORDINAL 대신 STRING 사용)
- @Lob : 데이터베이스 BLOB, CLOB과 매핑, 문자면 CLOB 나머지는 BLOB 매핑
- @Transient : 매핑 무시 (메모리상에 임시로 값 보관할 때 사용)
기본 키 매핑 애노테이션은 @Id(Private Key), @GeneratedValue가 있는데 GeneratedValue는 다음과 같이 설정을 할 수있다.
IDENTITY
- 데이터베이스에 위임 (MySQL의 AUTO_INCREMENT, PostgreSQL ..)
- AUTO_INCREMENT는 INSERT를 한 이후에 ID 값을 알 수 있어서 em.persist() 시점에 즉시 INSERT SQL이 실행된다.
SEQUENCE
데이터베이스 시퀀스는 유일한 값을 순서대로 생성하는 특별한 데이터베이스 오브젝트로 @SequenceGenerator 선언이 추가로 필요하다. (ORACLE, PostgreSQL, H2..)
@SecuenceGenerator
- name : 식별자 생성기 이름
- sequenceName : 데이터베이스에 등록되어 있는 시퀀스 이름
- initialValue : DDL 생성시에만 사용, 시퀀스 DDL 생성할 때 처음 시작하는 수를 지정 (기본값 1)
- allocationSize : 시퀀스 한번 호출시 증가하는 수, 이 값이 1이면 매번 DB에 접근해서 시퀀스 값을 받아온다. (기본값 50)
기타)
TABLE : 키 생성용 테이블, 모든 DB에서 사용, @TableGenerator 필요 (성능상 잘 쓰진 않음)
AUTO : 데이터베이스에 따라 자동 지정
[참고] 인프런 김영한님 강의를 공부한 내용입니다.
'JPA' 카테고리의 다른 글
[JPA] JPQL (0) | 2022.07.05 |
---|---|
[JPA] 프록시를 이용한 지연 로딩(FetchType.LAZY)과 연관관계 옵션(영속성 전이, 고아 객체) (0) | 2022.06.30 |
[JPA] 상속관계 매핑 (0) | 2022.06.30 |
[JPA] 연관관계 매핑 (0) | 2022.06.29 |
[JPA] JPA 기본 개념과 영속성 컨텍스트 (0) | 2022.06.24 |