1. 엔티티 클래스 및 테이블 매핑 관련 어노테이션
- @Entity: 클래스가 데이터베이스 테이블과 매핑된다는 것을 명시한다.
- @Table: 엔티티와 매핑할 데이터베이스 테이블 이름 및 속성을 지정한다.
- name: 테이블 이름을 지정할 때 사용한다
- schema: 스키마 이름을 설정할 때 사용한다
- catalog: 카탈로그를 지정할 때 사용한다
- uniqueConstraints: 고유 제약 조건을 설정할 때 사용한다
2. 기본 키 매핑 관련 어노테이션
- @Id: 기본 키로 사용할 필드에 지정한다.
- @GeneratedValue: 기본 키 값 생성을 위한 전략을 지정할 때 사용한다.
- strategy: AUTO, IDENTITY, SEQUENCE, TABLE 중 하나를 선택한다.
- generator: 키 생성기 이름을 지정한다.
- @SequenceGenerator: GenerationType.SEQUENCE 전략 사용 시 시퀀스 생성기를 정의할 때 사용한다.
- name: 생성기 이름을 지정한다.
- sequenceName: 사용할 시퀀스 이름을 설정한다.
- @TableGenerator: GenerationType.TABLE 전략 사용 시 테이블 생성기를 정의할 때 사용한다.
- name: 생성기 이름을 지정한다.
- table: 키 생성용 테이블 이름을 지정한다.
3. 필드와 열 매핑 관련 어노테이션
- @Column: 필드를 데이터베이스 열과 매핑하며 이름, 길이, 고유 여부, nullable 여부 등을 지정할 수 있다.
- name: 열 이름을 지정한다.
- nullable: NULL 허용 여부를 지정한다.
- unique: 고유 제약 조건 여부를 지정한다.
- length: 문자열 길이를 지정할 때 사용한다 (문자열 타입에만 적용).
- columnDefinition: 데이터베이스에 지정할 열 정의를 직접 설정할 때 사용한다.
- @Enumerated: Enum 타입을 매핑할 때 사용한다.
- EnumType.ORDINAL: 순서 값으로 매핑한다.
- EnumType.STRING: 이름으로 매핑한다.
- @Temporal: 날짜와 시간 타입을 매핑할 때 사용한다.
- TemporalType.DATE: 날짜 값만 매핑한다.
- TemporalType.TIME: 시간 값만 매핑한다.
- TemporalType.TIMESTAMP: 날짜와 시간 값을 모두 매핑한다.
- @Lob: 큰 데이터를 BLOB 또는 CLOB으로 매핑할 때 사용한다.
- @Transient: 데이터베이스에 매핑되지 않도록 필드를 설정할 때 사용한다.
4. 연관 관계 매핑 관련 어노테이션
- @OneToOne: 1 대 1 관계를 매핑한다.
- mappedBy: 양방향 관계에서 연관 관계의 주인을 설정한다.
- cascade: 연관된 엔티티의 상태 변화를 전파할 때 사용한다.
- fetch: FetchType.LAZY 또는 FetchType.EAGER로 설정할 수 있다.
- @OneToMany: 1 대 N 관계를 매핑한다.
- mappedBy: 연관 관계의 주인을 지정한다.
- cascade와 fetch 옵션을 제공한다.
- @ManyToOne: N 대 1 관계를 매핑한다.
- @ManyToMany: N 대 N 관계를 매핑한다.
- mappedBy: 양방향 관계에서 연관 관계의 주인을 설정한다.
- cascade와 fetch 옵션을 제공한다.
- @JoinTable과 함께 사용하여 연결 테이블을 설정할 수 있다.
- @JoinColumn: 외래 키 열을 지정한다.
- name: 열 이름을 지정한다.
- referencedColumnName: 외래 키가 참조할 기본 키 이름을 설정한다.
- nullable, unique 등의 속성을 지정할 수 있다.
- @JoinTable: N 대 N 관계에서 연결 테이블을 설정한다.
- name: 연결 테이블 이름을 지정한다.
- joinColumns: 현재 엔티티의 외래 키 열 정의를 설정한다.
- inverseJoinColumns: 상대 엔티티의 외래 키 열 정의를 설정한다.
5. 조회 성능 최적화 관련 어노테이션
- @Fetch: Fetch 전략을 세밀하게 제어할 때 사용한다.
- @BatchSize: N+1 문제를 해결하기 위해 한 번에 로드할 엔티티 개수를 지정한다.
- @OrderBy: 연관된 엔티티의 정렬 기준을 지정한다.
- @OrderColumn: 정렬을 위한 열을 데이터베이스에 추가하여 순서를 보장한다.
6. 고유 제약 조건 및 인덱스 설정 관련 어노테이션
- @UniqueConstraint: @Table의 uniqueConstraints 속성에서 사용하며, 고유 제약 조건을 추가할 때 사용한다.
- @Index: 특정 열에 인덱스를 설정할 때 사용한다. @Table의 indexes 속성에 추가할 수 있다.