@NaturalId 는 JPA에서 사용하는 어노테이션으로, 엔티티의 자연 키(natural key)를 나타낸다.
(자연 키: 비즈니스적으로 의미가 있고, 엔티티를 고유하게 식별할 수 있는 필드. ex: 사용자 이메일, 주민등록번호, 상품 코드 등)
특징 >>
@NaturalId 로 지정된 필드는 엔티티 내에서 유일해야 한다. 설정되면 변경되지 않는 것이 좋다.
@NaturalId는 Hibernate의 2차 캐시와 함께 사용될 때, 자연 키 기반의 캐싱을 지원한다.(성능 향상 가능)
자연 키를 이용하여 엔티티를 검색할 때, @NaturalId는 해당 검색을 효율적으로 할 수 있도록 해준다.
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@NaturalId
@Column(nullable = false, unique = true)
private String email;
}
위 코드에서는 email이 User 엔티티를 식별하는 데 사용되는 자연 키다.
@Column(nullable = false, unique = true) : 이 필드(email)가 null이 될 수 없고, 유일해야 한다.
@Id 와의 차이점 >>
@Id는 JPA에서 엔티티의 Primary Key를 지정하는 데 사용된다.
보통, 숫자 형태의 자동 생성 값(Auto Increment)이나 UUID와 같이, 엔티티 생성 시 자동으로 할당되며, 비즈니스적 의미는 적거나 전혀 없는 경우가 많다.
(데이터베이스 상의 기술적인 식별자 역할)
@Id 값은 일반적으로 불변이다.
@NaturalId 는 비즈니스적으로 의미가 있는 자연 키(Natural Key)를 나타내는 데 사용된다.
데이터베이스에 저장된 데이터를 비즈니스 로직에 따라 더 자연스럽게 식별할 수 있도록 해준다.
@Id와 달리 비즈니스적 의미를 지닌다.
(비즈니스 로직상 의미 있는 식별자 역할)
@NaturalId 는 경우에 따라 변경될 수 있다.(가능한 한 불변성을 유지)
정리 후기 >>
수업 시간에 배운 annotation 등도 틈틈이 정리해놔야겠다.
---
24년 1월 11일 작성된 글입니
'JAVA > SpringBoot' 카테고리의 다른 글
JPA에서 Enum 처리하기: @Enumerated 와 EnumType (1) | 2024.03.24 |
---|---|
JPA @Basic 어노테이션 사용법 (1) | 2024.03.24 |
JPA @GeneratedValue: AUTO, IDENTITY, SEQUENCE, TABLE 에 대해 알아보자 (0) | 2024.03.24 |
인텔리제이 Spring Boot 프로젝트에서 자동 리로드 설정 방법 (1) | 2024.03.24 |
JPA(Java Persistence API) 이해하기 (0) | 2024.03.23 |