250x250
syk531
하루
syk531
전체 방문자
오늘
어제
  • 분류 전체보기 (166)
    • 개발 (166)
      • java (11)
      • kotlin (7)
      • spring, spring boot (35)
      • Javascript (4)
      • Tyhmeleaf (2)
      • Kafka (17)
      • Docker (8)
      • Kubernetes (3)
      • Elastic Stack (4)
      • react native (3)
      • Web (4)
      • GIS (3)
      • 리눅스 (16)
      • Windows (2)
      • 네트워크 (2)
      • 안드로이드앱 (5)
      • git (2)
      • Tool (15)
      • 프로젝트 (7)
      • 백준알고리즘 (14)
      • DB (2)

인기 글

최근 글

블로그 메뉴

    공지사항

    태그

    • 티스토리챌린지
    • 뉴스앱
    • 오블완

    최근 댓글

    티스토리

    hELLO · Designed By 정상우.
    syk531

    하루

    개발/spring, spring boot

    [Spring Data JPA] Entity가 복합키를 사용할때 JpaRepository 개발 방법

    2024. 2. 16. 16:50
    728x90
    반응형

    Spring Data JPA에서 엔티티가 복합키를 사용할 때 JpaRepository를 개발하는 방법은 @IdClass 또는 @EmbeddedId를 사용하여 복합키를 구현한 후, 해당 키 클래스를 사용하여 JpaRepository 인터페이스를 확장하는 것입니다.

     

    1. @IdClass 사용 예제

    먼저, 복합키를 위한 클래스를 생성합니다. 이 클래스는 Serializable 인터페이스를 구현해야 합니다.

    import java.io.Serializable;
    
    @Builder
    @AllArgsConstructor
    @NoArgsConstructor
    @Data
    public class EmployeeId implements Serializable {
        private Long departmentId; 
        private Long employeeId;
    }

    다음으로, 엔티티 클래스에 @IdClass 어노테이션을 사용합니다.

    import javax.persistence.Entity;
    import javax.persistence.Id;
    import javax.persistence.IdClass;
    
    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    @Entity
    @IdClass(EmployeeId.class)
    public class Employee {
        @Id
        @Column(name = "department_id")
        private Long departmentId;
    
        @Id
        @Column(name = "employee_id")
        private Long employeeId;
    
    }

    마지막으로, JpaRepository 인터페이스를 확장합니다.

    import org.springframework.data.jpa.repository.JpaRepository;
    
    public interface EmployeeRepository extends JpaRepository<Employee, EmployeeId> {
        // 쿼리 메소드 생략
    }

     

    2. @EmbeddedId 사용 예제

    복합키를 위한 임베디드 클래스를 생성합니다.

    import javax.persistence.Embeddable;
    import java.io.Serializable;
    
    @Data
    @Embeddable
    public class EmployeeId implements Serializable {
        private Long departmentId;
        private Long employeeId;
    }

    엔티티 클래스에서 @EmbeddedId를 사용하여 복합키를 적용합니다.

    import javax.persistence.EmbeddedId;
    import javax.persistence.Entity;
    
    @Entity
    public class Employee {
        @EmbeddedId
        private EmployeeId employeeId;
    
        // 다른 필드 및 생성자, getter, setter 생략
    }

    JpaRepository 인터페이스를 확장합니다.

    import org.springframework.data.jpa.repository.JpaRepository;
    
    public interface EmployeeRepository extends JpaRepository<Employee, EmployeeId> {
        // 쿼리 메소드 생략
    }

     

     

    참고자료

    https://ykh6242.tistory.com/entry/JPA-%EC%97%94%ED%8B%B0%ED%8B%B0-%EB%B3%B5%ED%95%A9%ED%82%A4Composite-Primary-Keys-%EB%A7%A4%ED%95%91

    728x90
    반응형
    저작자표시 (새창열림)

    '개발 > spring, spring boot' 카테고리의 다른 글

    [WebSocket] [STOMP] client 테스트 방법  (0) 2024.06.11
    [Spring Boot] [WebSocket] Protocol 설정 방법  (0) 2024.02.20
    [Spring Data JPA] Cannot do an operation on a closed statement 오류 해결  (0) 2024.02.16
    Spring Boot에서 JPA 사용하기  (0) 2024.02.15
    [Spring Boot] 서버 시작 시 WebSocket 연결 client java 로직 구현  (1) 2024.02.08
      '개발/spring, spring boot' 카테고리의 다른 글
      • [WebSocket] [STOMP] client 테스트 방법
      • [Spring Boot] [WebSocket] Protocol 설정 방법
      • [Spring Data JPA] Cannot do an operation on a closed statement 오류 해결
      • Spring Boot에서 JPA 사용하기
      syk531
      syk531
      기억을 위해 기록을.

      티스토리툴바