본문 바로가기

Backend/SpringBoot

SpringBoot의 @IdClass를 사용해서 복합 Primary Key 적용하기

안녕하세요!

이번 포스팅에서는 SpringBoot의 @IdClass을 이용해서

복합키 매핑하는 방법에 대해 알아보도록 하겠습니다.

@IdClass를 사용하는 이유

DB를 설계하다 보면 PK가 여러 개가 되는 경우가 종종 발생하곤 합니다.

그럴 때는 Primary Key에게 모두 @Id 어노테이션을 주면 되는데,

무작정 어노테이션을 붙이면 오류를 출력하게 됩니다.

이때 @IdClass를 사용하게 되면 복합키 매핑이 가능합니다.

프로젝트 설명

class라는 수강 현황을 저장해놓는 테이블이 있습니다. 이 테이블의 구조는 아래와 같습니다.

이 테이블과 매핑을 하기 위한 엔티티를 작성해보겠습니다.

XXXid Class 추가

@IdClass를 사용하기 위해서는 PK 속성을 가지고 있는 컬럼들을 모아놓은 클래스가 필요합니다.

ClassId.java

public class ClassId {

    /**
     * 학번
     */
    @Column(name = "student_id")
    private Integer studentId;

    /**
     * 과목코드
     */
    @Column(name = "subject_code")
    private StringsubjectCode;

}

PK 속성을 가지고 있는 학번과 과목 코드를 추가해줍니다.

Entity 추가

Class.java

@Entity
@Getter
@Setter
@IdClass(ClassId.class)
public class Class {

    /**
     * 학번
     */
    @Id
    @Column(name = "student_id")
    private Integer studentId;

    /**
     * 과목 코드
     */
    @Id
    @Column(name = "subject_code")
    private String subjectCode;

    /**
     * 비고
     */
    @Column(name = "memo")
    private String memo;

}

Entity는 항상 추가하시던 대로 추가하시되,

클래스 위에 @IdClass 어노테이션을 붙이고 괄호 안에 PK 정보가 들어있는 클래스 이름을 명시하면 됩니다.

그 후에 PK 속성을 가지고 있는 컬럼(학번, 과목 코드)위에는 @Id 어노테이션을 붙여주시면 복합키 매핑이 성공하게 됩니다.

감사합니다!