스프링 부트에서 JPA를 통해 테이블의 기본키가 복합키인 경우 구현하는 방법입니다.
예제로 만든 급여 테이블의 DDL입니다.
기본키가 직원 아이디와 급여 날짜로 구성되어 있습니다.
salary와 status 컬럼은 급여액과 급여 상태를 각각 가리키고 있습니다.
복합키를 구현하는 방법은 @IdClass와 @EmbeddedId 2가지를 통해서 할 수 있는데
저는 @EmbeddedId를 사용해서 구현했습니다.
식별자 클래스 코드에 대해 설명하면
@Data 어노테이션을 통해 lombok 라이브러리를 통해 getter, setter, toString 메소드 등을 자동 생성합니다.(15라인)
@NoArgsConstructor 어노테이션으로 기본 생성자를 생성합니다.(16라인)
@Embeddable 어노테이션으로 해당 클래스가 식별자 클래스, 복합키를 구성하는 클래스임을 선언합니다.(17라인)
해당 클래스를 외부에서 사용할 수 있도록 하는 직렬화 Serializable 인터페이스를 구현하고 직렬화 버전 상수를 선언합니다.(18~20라인)
@Column 어노테이션으로 기본키 컬럼을 매칭합니다.(22~27라인)
@Temporal 어노테이션은 날짜 타입 컬럼을 매칭합니다.(25라인)
equals와 hashCode 메소드를 구현해서 동등성 비교를 지원하고 있습니다.(34~51라인)
급여 엔티티 클래스는 @EmbeddedId 어노테이션을 통해 식별자 클래스를 기본키로 매핑합니다.(22~23라인)
QueryDSL로 직원 엔티티와 급여 엔티티를 조인해서 List로 리턴합니다.
이 List를 RestController로 전달하여 json으로 표출합니다.
복합키가 기본키인 급여 엔티티 조회가 정상적으로 된 것을 확인할 수 있습니다.
'dev > JPA' 카테고리의 다른 글
JPA Infinite Recursion 예외 처리 (0) | 2023.08.29 |
---|---|
Spring Boot JPA QueryDSL (0) | 2023.08.29 |
Spring Boot JPA ID IDENTITY (0) | 2023.08.28 |
Spring Boot JPA Join (0) | 2023.08.28 |
Spring Boot Data JPA (0) | 2023.02.03 |