728x90
들어가면서…
- 복합키 사용하는 케이스
- 여러 컬럼을 하나의 식별자로 사용해야 할 때(ex: 학생과 과목을 조인한 결과를 저장하는 테이블에서, 학생과 과목을 기준으로 각각 조회해야 할 때)
- 왜 복합키 사용해야 하는 지
- 기본키로 단일 컬럼을 사용할 경우, 하나의 컬럼으로는 식별할 수 없는 경우가 있기 때문에 복합키를 사용해야 합니다.
- 복합키 사용하기 위한 사전 설정
- @Embeddable 어노테이션을 사용하여 복합키 클래스를 정의합니다.
- 복합키 클래스 내부에는 @Embeddable 어노테이션을 사용하지 않고 @Column 어노테이션으로 각 컬럼을 정의합니다.
- 해당 엔티티 클래스의 @EmbeddedId 어노테이션을 사용하여 복합키 클래스를 매핑합니다.
코드 예시
- 복합키 클래스 정의
@Embeddable
public class StudentSubjectId implements Serializable {
private Long studentId;
private Long subjectId;
//생성자, getter, setter, equals, hashCode 생략
}
- 엔티티 클래스 정의
@Entity
public class StudentSubject {
@EmbeddedId
private StudentSubjectId id;
@ManyToOne
@MapsId("studentId")
private Student student;
@ManyToOne
@MapsId("subjectId")
private Subject subject;
//생성자, getter, setter 생략
}
복합키 장단점
장점:
- 복합키를 사용하면 하나의 컬럼으로는 식별할 수 없는 경우에도 식별할 수 있습니다.
- 복합키를 사용하면 여러 컬럼을 하나의 식별자로 사용할 수 있으므로, 테이블 간 조인 시 효율적인 쿼리를 작성할 수 있습니다.
단점:
- 복합키를 사용하면 코드가 복잡해질 수 있습니다.
- @IdClass 방식은 복합키를 구성하는 각각의 식별자 컬럼을 별도로 정의해야 하므로 유지보수성이 떨어질 수 있습니다.
결론
따라서 복합키를 사용할 때는 상황에 맞게 적절한 방법을 선택하고, 유지보수성을 고려하여 구현해야 합니다. ^^
내저장소 바로가기 luxury515
'Back-end > JPA' 카테고리의 다른 글
JPA 맵핑전략 (0) | 2023.04.13 |
---|---|
JPA에서 Specification 사용해보기 (0) | 2023.04.13 |
JoinColumn vs MappedBy 에 관하여 (0) | 2023.04.11 |
JPA의 N+1 문제가 발생하는 이유 , 그리고 그 해결 방안에 대한 연구 (0) | 2023.04.11 |
QueryDSL 기본사용법 (0) | 2023.04.11 |