테이블과 매핑할 클래스에 붙이는 어노테이션, 해당 어노테이션을 통해 JPA가 클래스를 관리한다.
@Entity(name = "엔티티 지정명")
- name : 서로 같은 이름을 가지는 엔티티 클래스가 존재하면 해당 옵션을 통해 이름 설정을 변경해준다.
- @Entity 어노테이션에서 기본 생성자를 필수로 작성해야함. (@NoArgsConstructor)
- 필드에 final 예약어 X, final/enum/interface/inner 클래스에 사용 불가능
@Table(name = "매핑할 테이블명")
: 매핑할 테이블의 이름을 직접 지정
(기본값: 엔티티 이름을 사용함)@Table(catalog = )
: catlog 매핑@Table(schema = )
: schema 매핑@Table(uniqueConstraints = )
: 유니크 제약 조건 생성, DDL 쿼리에만 사용됨
ex)@Table(uniqueConstraints = {@UniqueConstraint(name = "제약조건 이름", columnNames={ "키 이름1", "키 이름2"})})
@GeneratedValue(strategy=GenerationType.옵션)
어노테이션과 함께 사용가능하다.spring:
jpa:
hibernate:
ddl-auto: none
use-new-id-generator-mappings: true| false
IDENTITY : 기본키 생성을 데이터베이스를 통해서 함.
AUTO_INCREMENT
: 기본키 값을 획득 하기 위해 JPA는 데이터베이스를 추가로 조회해야함.- 데이터베이스에 선 INSERT 후 기본키 값을 획득 함. EntityManager.persist()호출 하자마자 INSERT SQL을 DB에 전달함. = 쓰기 지연 X
SEQUENCE : 데이터 베이스의 시퀀스를 이용하여 기본키 값을 할당.
@Entity @SequenceGenerator (name ="시퀀스 생성자 이름", sequenceName = "시퀀스 이름", initialValue = 1, allocationSize = 1) public class 엔티티클래스{ @Id @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "시퀀스 생성자 이름") private Long id; }
- 시퀀스를 사용하여 식별자 조회하고, 해당 식별 값을 엔티티와 함께 영속성 컨텍스트에 저장.
- 트랜젝션, 커밋 후에 해당 엔티티를 데이터베이스에 저장하게됨. (IDENTITY 와 반대)
- 쓰기 지연 O
- @SequenceGenerator
- name : 시퀀스 생성자 이름 (필수)
- sequenceName: DB에 등록된 시퀀스 이름
- initialValue : DDL 생성시에 지정할 시퀀스의 시작 번호
- allocationSize : 시퀀스 한번 호출에 증가하는 수 (Default: 50)
- catalog, schem : 데이터베이스 카탈로그, 스키마 이름
CREATE SEQUENCE [시퀀스이름] START WITH [시작 번호] INCREMENT BY [증가 단위]
TABLE : 키 생성 테이블을 사용
SEQUENCE 옵션을 모방
SEQUENCE 와 비슷하지만, 기본키를 조회한 후 UPDATE를 통해 한번 더 DB에 액세스함
-> allocationSize 옵션도 같이줘서 최적화 가능@Entity @TableGenerator (name ="테이블 생성자 이름", sequenceName = "테이블 이름", pkColumnValue = "기본키 이름", allocationSize = 1) public class 엔티티클래스{ @Id @GeneratedValue(strategy = GenerationType.TABLE, generator = "테이블 생성자 이름") private Long id; }
- name: 테이블 생성자 이름 (필수)
- table: 테이블 이름
- pkColumnName : 시퀀스 칼럼명
- valueColumnName : 시퀀스 값 칼럼명
- pkColumnValue : 키로 사용할 값 이름
- initailValue : 초기 값, 마지막으로 생성된 값 기준
- allocationSize : 시퀀스 한번 호출에 증가하는 수
- catalog, schema
- uniqueConstraints : 유니크 제약 조건 지정
AUTO : 자동
IDENTITY, SEQUENCE, TABLE 중 하나를 DB환경에 맞게 자동 선택
- SEQUENCE, TABLE의 생성자를 미리 만들어 놔야함..!
- name: 엔티티의 필드를 매핑할 테이블의 열 이름으로 지정할 수 있다.
- nullale: 해당 칼럼에 null 을 허용할지 안할지 여부 (defulat: true)
- length: 문자열 자료형의 길이를 지정 가능하다 VARCHAR(길이)
- insertable : 엔티티 저장 시 필드도 같이 저장.
- updatable : 엔티티 수정 시 필드도 같이 수정
- table : 하나의 엔티티를 두개 이상의 테이블에 매핑할 때 사용
- unique : 한 컬럼에 간단한 유니크 제약 조건 (두개이상은 @Table.uniqueConstraints사용)
- columnDefinition : 데이터 베이스 칼럼 정보를 직접 설정
- precision, scale : Decimal 타입 을 설정할때 사용
[precision-소수점을 포함한 전체 자리수, scale-소수의 자리수]
@Enumerated(EnumType.ORDINAL)
: enum 순서를 DB에 저장 (0, 1~~)
-> 이미 저장된 enum 순서번호를 변경 불가능, but 저장되는 크기가 작다
@Enumerated(EnumType.STRING)
: enum 이름을 DB에 저장 (admin, user ~~)
-> enum 의 순서가 바뀌거나 추가되어도 상관 X, 데이터 크기가 좀 더 큼
@Temporal(TemporalType.TIMESTAMP)
java.sql.*
길이 제한이 없는 문자열
객체에 임시로 값을 저장할 때
AccessType.FILED
, private필드도 접근 가능AccessType.PROPERTY
(Getter 사용), Getter 함수에도 어노테이션 적용 가능