안녕하세요!
이번 포스팅에서는 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 어노테이션을 붙여주시면 복합키 매핑이 성공하게 됩니다.
감사합니다!
'Backend > SpringBoot' 카테고리의 다른 글
SpringBoot의 ControllerAdvice를 이용하여 JSON 형태로 예외처리하기 (0) | 2020.02.18 |
---|---|
SpringBoot의 MockMvc를 사용하여 GET, POST 응답 테스트하기 (6) | 2020.01.31 |
SpringBoot로 캐싱(Caching)하기 (0) | 2020.01.12 |
SpringBoot로 JSON 응답 보내는 방법 (GSON JsonObject, @ResponseBody, @RestController) (0) | 2019.12.26 |
SpringBoot와 Thymeleaf를 이용하여 페이징하기 (1) | 2019.12.11 |