@Transient는 Java Persistence API (JPA)에서 사용되는 애노테이션으로, 엔티티 클래스의 특정 필드가 데이터베이스 테이블에 매핑되지 않도록 지정
즉, 해당 필드는 데이터베이스와 상호작용하지 않으며, 영속성 콘텍스트(persistence context)에 포함되지 않음
1. 주요 특징
- @Transient로 선언된 필드는 데이터베이스에 저장되지 않으며, 쿼리 결과로 조회되지 않음
- 해당 필드는 JPA 관리에서 제외되며, 오직 애플리케이션 내부에서 사용
- @Transient는 JPA 표준 애노테이션
- 데이터베이스와 연관이 없는 비즈니스 로직이나 캐싱용 필드 등에 사용
2. 사용 예
@Entity
public class Product {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private double price;
private double discount;
@Transient // 데이터베이스에 저장되지 않음
private double discountedPrice;
public double getDiscountedPrice() {
return price - discount; // 애플리케이션 내에서만 계산
}
}
- 설명:
- discountedPrice는 데이터베이스 테이블에 저장되거나 조회되지 않음
- 대신 애플리케이션 로직에서 계산된 값으로 사용
3. 동작 원리
- JPA는 엔티티를 영속화할 때 @Transient로 선언된 필드를 무시
- @Transient 필드는 데이터베이스와 매핑되지 않으므로, INSERT, UPDATE, SELECT 쿼리에 포함되지 않음
- 단순히 애플리케이션 내부의 메모리 변수로만 작동
4. Spring과의 차이점
JPA의 @Transient와 Spring의 @Transient(from org.springframework.data.annotation.Transient)는 다른 용도로 사용
- JPA의 @Transient:
- JPA 표준 애노테이션으로, 데이터베이스와의 매핑을 방지
- Hibernate와 같은 JPA 구현체에서 동작
- Spring Data의 @Transient:
- Spring Data의 기능으로, MongoDB, Elasticsearch 등 다양한 데이터 스토리지와의 매핑에서 제외되도록 설정
5. 주요 사용 사례
- 계산된 값:
- 예: 할인율, 합계, 평균 등 실시간으로 계산되는 데이터.
- 캐싱 데이터:
- 애플리케이션에서만 임시로 유지하고, 영속성 저장소와 상관없는 데이터.
- 비즈니스 로직 필드:
- 예: 세션 토큰, 사용자 상태, 일시적인 플래그.
- DTO 변환:
- JPA 엔티티를 DTO로 변환할 때 추가적인 필드로 사용.
'Dev > SpringBoot' 카테고리의 다른 글
Cotato 10th 백엔드 네트워킹 회고 1 (1) | 2025.02.10 |
---|---|
default_batch_fetch_size (0) | 2025.02.10 |
인증된 사용자 정보 추출 커스텀 어노테이션 생성 (1) | 2025.02.10 |
카카오페이 단건 결제 구현하기 (0) | 2025.02.10 |
SSE로 푸시 알림 기능 구현하기 (0) | 2025.02.10 |