T_era

JPA @Entity와 @Table 어노테이션 정리 본문

Programing/Spring

JPA @Entity와 @Table 어노테이션 정리

블스뜸 2025. 5. 15. 18:50

@Entity

  • JPA를 이용한 객체-테이블 매핑 시 필수 어노테이션.
  • 클래스 레벨에 적용하여 해당 클래스를 Entity로 명시.
  • 필수 조건:
    • @Id 어노테이션을 통한 PK 필드 지정 필수.
    • 기본 생성자(No-args Constructor) 필수.
    • final, enum, interface, inner 클래스 사용 불가.
    • 필드에 final 키워드 사용 불가.
  • 속성:
    • name: Entity 이름 지정. 기본값은 클래스 이름. 혼동 방지를 위해 기본값 사용 (생략) 권장.
@Entity // 해당 클래스를 Entity로 명시
@Table(name = "tutor") // 매핑 테이블 이름 지정
public class Tutor {

    @Id // PK 필드 지정
    private Long id;

    private String name; // 일반 필드

    public Tutor() { // 기본 생성자 (필수)
    }
}

@Table

  • Entity와 매핑될 데이터베이스 테이블 설정 정의 어노테이션.
  • 클래스 레벨에 적용.
  • 속성:
    • name: 매핑 테이블 이름 지정.
    • catalog: 데이터베이스 catalog 매핑.
    • schema: 데이터베이스 schema 매핑.
    • uniqueConstraints: DDL 생성 시 유니크 제약 조건 설정. 실행 로직과 무관, DDL 생성 시에만 적용. @Column의 unique 속성으로도 설정 가능.
@Entity
@Table(name = "tutor",
       uniqueConstraints = {@UniqueConstraints(name = "name_unique", columnNames = {"name"})})
public class Tutor {
    @Id
    private Long id;

    @Column(unique = true, length = 20, nullable = false)
    private String name;

    public Tutor() {
    }
}

@Column

  • Entity 필드와 데이터베이스 컬럼 매핑 및 컬럼 제약 조건 설정 어노테이션.
  • 필드 레벨에 적용.
  • 주요 속성:
    • unique: 유니크 제약 조건 설정 (기본값: false).
    • nullable: 필수 여부 설정 (기본값: true).
    • length: 문자열 타입 컬럼 길이 설정.

@UniqueConstraints (@Table)

  • 테이블 레벨에서 유니크 제약 조건 설정 어노테이션.
  • @Table 어노테이션의 속성으로 사용.
  • name: 제약 조건 이름 직접 지정.
  • columnNames: 유니크 제약 조건 적용 컬럼 목록 배열 형태 지정.

결론적으로, @Entity는 클래스를 Entity로 정의하며, @Table은 매핑될 테이블 설정을 담당한다. @Column은 필드-컬럼 매핑 및 제약 조건 설정, @Table의 uniqueConstraints는 테이블 레벨 유니크 제약 설정을 수행한다.