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;
}
'IT개발 > Spring5' 카테고리의 다른 글
[Spring5] 의존성 주입(Dependency Injection) 이해하기(이걸로 끝) (0) | 2025.03.20 |
---|---|
[Spring5] JSP를 사용하지 않는 이유 & JPA, JSON 개념(간단) (0) | 2025.03.20 |
[Spring Boot] 개발 환경 설정부터 H2 데이터베이스 웹 연결 (0) | 2024.11.28 |
[Spring5]@RestController, @JsonIgnore, @RequestBody 정의 및 예시 (0) | 2024.11.25 |
[Spring5]로그인과 쿠키, 세션, 인터셉터 (0) | 2024.11.24 |