728x90

들어가면서…

  1. 복합키 사용하는 케이스
  • 여러 컬럼을 하나의 식별자로 사용해야 할 때(ex: 학생과 과목을 조인한 결과를 저장하는 테이블에서, 학생과 과목을 기준으로 각각 조회해야 할 때)
  1. 왜 복합키 사용해야 하는 지
  • 기본키로 단일 컬럼을 사용할 경우, 하나의 컬럼으로는 식별할 수 없는 경우가 있기 때문에 복합키를 사용해야 합니다.
  1. 복합키 사용하기 위한 사전 설정
  • @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

+ Recent posts