본문 바로가기
IT개발/Spring5

[Spring5]JPA의 기본 어노테이션

by Thompson 2025. 4. 6.
728x90
반응형
@Entity JPA 엔티티 클래스 선언
@Table 테이블 이름 및 제약 조건 설정
@Id 기본 키(PK) 지정
@GeneratedValue PK 자동 생성 전략 설정
@Column 컬럼 속성 설정
@Enumerated Enum 타입 매핑
@Temporal 날짜/시간 타입 매핑
@Lob 대용량 데이터 저장 (CLOB/BLOB)
@Transient 영속성 제외 (DB 저장 X)

1. @Entity - 엔티티 클래스 선언

개념

  • DB 테이블과 매핑되는 클래스를 나타냄
  • JPA에서 관리하는 영속성(Persistence) 객체로 인식

사용법

 
import jakarta.persistence.*;

@Entity //JPA 엔티티 선언
@Table(name = "users") //테이블명 지정 (생략 가능)
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    
    private String name;
}

주의할 점

  • 반드시 @Id(PK) 필드를 포함해야 함
  • 기본 생성자 필수 (public User() {})
  • 클래스는 final이 아니어야 함

 2. @Table - 테이블 매핑

개념

  • 엔티티가 매핑될 테이블 정보를 설정
  • 생략하면 클래스 이름이 테이블 이름으로 자동 매핑됨

사용법

@Entity
@Table(name = "members", uniqueConstraints = {
    @UniqueConstraint(name = "unique_username", columnNames = "username")
})
public class Member {
    @Id @GeneratedValue
    private Long id;

    @Column(nullable = false, unique = true)
    private String username;
}

주요 속성

속성설명
name 매핑할 테이블 이름
schema 스키마 지정
catalog DB 카탈로그 지정
uniqueConstraints 유니크 제약 조건 설정

3. @Id, @GeneratedValue - 기본 키 설정

개념

  • @Id → 기본 키(PK) 필드 지정
  • @GeneratedValue → 자동 생성 전략 설정

사용법

@Entity
public class Product {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY) // 기본 키 자동 생성 (MySQL AUTO_INCREMENT)
    private Long id;
}

@GeneratedValue 전략 종류

전략설명
IDENTITY DB의 AUTO_INCREMENT 사용 (MySQL, PostgreSQL 등)
SEQUENCE DB의 Sequence 사용 (Oracle, PostgreSQL)
TABLE 키 생성용 테이블을 사용
AUTO DB에 맞게 자동 선택 (기본값)

4. @Column - 필드 매핑

개념

  • 테이블의 컬럼과 클래스 필드를 매핑
  • 생략하면 필드명과 같은 컬럼으로 자동 매핑됨

사용법

@Entity
public class Employee {
    @Id @GeneratedValue
    private Long id;

    @Column(name = "emp_name", nullable = false, length = 100)
    private String name;

    @Column(unique = true)
    private String email;
}

주요 속성

속성설명
name 컬럼 이름 지정
nullable NULL 허용 여부 (false이면 NOT NULL)
length 문자열 길이 (기본값: 255)
unique 유니크 제약 조건 설정

5. @Enumerated - Enum 타입 매핑

개념

  • Enum 값을 DB에 저장하는 방법 지정
  • 기본값: ORDINAL(숫자로 저장, 비추천)
  • STRING 옵션 사용 권장 (문자로 저장)

사용법

@Entity
public class Order {
    @Id @GeneratedValue
    private Long id;

    @Enumerated(EnumType.STRING) // 문자열로 저장 (ORDINAL은 비추천)
    private OrderStatus status;
}

enum OrderStatus {
    NEW, PROCESSING, COMPLETED, CANCELED
}

EnumType 종류

옵션저장 방식
ORDINAL 0, 1, 2 등 숫자로 저장 (위험!)
STRING "NEW", "PROCESSING" 등 문자로 저장 (추천)

6. @Temporal - 날짜/시간 타입 매핑

개념

  • Java의 Date 또는 LocalDateTime을 DB의 날짜 타입으로 매핑
  • Java 8 이상에서는 LocalDateTime 사용 권장 (별도 설정 불필요)

사용법

@Entity
public class Event {
    @Id @GeneratedValue
    private Long id;

    @Temporal(TemporalType.TIMESTAMP) // 날짜 + 시간 저장
    private Date eventDate;
}

TemporalType 종류

옵션설명
DATE 날짜(yyyy-MM-dd)
TIME 시간(HH:mm:ss)
TIMESTAMP 날짜 + 시간

7. @Lob - 대용량 데이터 저장

개념

  • BLOB(Binary) 또는 CLOB(Character) 데이터를 저장
  • String이면 CLOB, byte[]이면 BLOB

사용법

@Entity
public class Article {
    @Id @GeneratedValue
    private Long id;

    @Lob // 긴 텍스트 저장 (CLOB)
    private String content;
}

 8. @Transient - 영속성 제외 (DB 저장 X)

개념

  • DB 컬럼과 매핑하지 않고, 메모리에서만 사용되는 필드
  • 계산 필드, 캐시 필드 등에 사용

사용법

@Entity
public class User {
    @Id @GeneratedValue
    private Long id;

    private String name;

    @Transient // DB에 저장되지 않음
    private int tempValue;
}