프로그래밍/Spring

Spring Data JPA 어노테이션 정리

y_o_u__b 2024. 11. 1. 21:13

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 관계를 매핑한다.
    • cascade와 fetch 옵션을 제공한다.
  • @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 속성에 추가할 수 있다.