📌 서론
Java의 JPA에서 복합키를 관리하는 방법에는 주로 @Embeddable, @EmbeddedId 어노테이션을 사용한다. 복합 키, 즉 복수의 필드로 구성된 기본 키를 사용하는 경우에 이러한 어노테이션을 활용하여 테이블의 기본 키를 엔티티에서 표현할 수 있다.
이번 글에서는 @Embeddable과 @EmbeddedId에 대해서 알아보자
@Embeddable과 @EmbeddedId의 역할
@Embeddable
복합 키를 정의할 때 사용하는 어노테이션. 이 어노테이션을 사용하여 클래스를 정의하면, 해당 클래스는 다른 엔티티에서 임베디드 타입으로 사용될 수 있다. 복합 키 클래스 자체는 어떠한 생명주기도 갖지 않으며, 단지 엔티티의 일부로서 기능한다.
@EmbeddedId
엔티티에서 복합 키를 사용할 때, 해당 복합 키 필드에 붙이는 어노테이션. @Embeddable로 정의된 클래스 타입의 필드에 이 어노테이션을 사용하여 해당 필드가 엔티티의 식별자임을 명시한다.
사용 예시: 학생과 과목의 복합 키를 가진 성적 테이블
다음 예시는 학생 ID와 과목 ID를 복합 키로 가지는 성적 테이블을 JPA로 매핑하는 방법을 살펴보자.
복합 키 클래스 정의 (@Embeddable 사용)
import java.io.Serializable;
import javax.persistence.Embeddable;
@Embeddable
@NoArgsConstructor
@AllArgsConstructor
public class ScoreId implements Serializable {
private Long studentId;
private Long subjectId;
// getter, setter
// hashCode(), equals() 메서드 구현
}
엔티티 클래스 정의 (@EmbeddedId 사용)
import javax.persistence.Entity;
import javax.persistence.EmbeddedId;
import javax.persistence.Table;
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table(name = "scores")
public class Score {
@EmbeddedId
private ScoreId id;
private float score;
// getter, setter
}
🔥 결론
@Embeddable과 @EmbeddedId 어노테이션을 활용하는 방식은 Java JPA에서 복합 키를 효과적으로 관리할 수 있는 강력한 방법이다. 이를 통해, 개발자는 복합 키를 가진 엔티티의 정의와 사용을 더욱 명확하고 효율적으로 할 수 있다. 특히, 복합 키를 사용하는 엔티티의 경우, 이러한 어노테이션을 사용하면 엔티티 간의 관계를 더욱 명확하게 표현하며, 데이터의 일관성과 무결성을 보장하는 데 큰 도움을 준다.
앞서 설명한 바와 같이, @Embeddable과 @EmbeddedId는 서로 보완적인 관계에 있으며, 복합 키를 포함하는 엔티티의 설계와 구현에 있어 필수적인 요소이다.
'Spring > Spring Data JPA' 카테고리의 다른 글
JPA를 사용해 페이징 처리하는 두 가지 방법, Slice와 Page (0) | 2024.04.02 |
---|---|
QueryDSL 사용할때 Custom Interface와 QueryRepository 단독 빈 등록 방식 비교 (테스트 어노테이션) (0) | 2024.04.01 |
QueryDSL 사용 시 자동 업데이트 되지 않는 JPA Auditing 수정 날짜 문제 해결 방법 (1) | 2024.02.01 |
JPA와 Spring Data JPA의 차이 (1) | 2024.01.02 |
JPA N+1 문제 해결하기 (fetch join, entityGraph, batch size) (5) | 2023.12.28 |