JPA에서 복합키를 사용하려면 별도의 ID 클래스가 필요
package com.poc_lotte_chatbot.entity;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.IdClass;
import jakarta.persistence.Table;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@IdClass(ResocTopicRelId.class)
@Entity
@Table(name = "resoc_topic_rel", schema = "chatbi")
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class ResocTopicRel {
@Column(name = "org_party_id", nullable = false, length = 10)
private String orgPartyId;
@Id
@Column(name = "resoc_id", nullable = false, precision = 10)
private BigDecimal resocId;
@Column(name = "resoc_gubun_code", nullable = false, length = 5)
private String resocGubunCode;
@Column(name = "resoc_name", nullable = false, length = 100)
private String resocName;
@Column(name = "prompt_topic_type", length = 100)
private String promptTopicType;
@Id
@Column(name = "hist_str_date", nullable = false)
private LocalDateTime histStrDate;
@Id
@Column(name = "hist_end_date", nullable = false)
private LocalDateTime histEndDate;
}
역할:
- 실제 데이터베이스 테이블을 매핑하는 엔티티 클래스
- 테이블의 모든 컬럼(PK + 일반 컬럼)을 포함
특징:
- @IdClass(ResocTopicRelId.class): 복합키 클래스를 지정
- @Id 어노테이션이 3개: 복합키를 구성하는 각 필드에 표시
- 일반 컬럼들도 포함: orgPartyId, resocGubunCode, resocName, promptTopicType
쓰임:
- CRUD 작업의 대상
- 비즈니스 로직에서 데이터를 담는 객체
- Repository를 통한 데이터 조회/저장
package com.poc_lotte_chatbot.entity;
import jakarta.persistence.Embeddable;
import lombok.*;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
@Embeddable
@Data
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode
public class ResocTopicRelId implements Serializable {
private BigDecimal resocId;
private LocalDateTime histStrDate;
private LocalDateTime histEndDate;
}
역할:
- 테이블의 복합 기본키(Composite Primary Key)를 표현하는 클래스
- resoc_topic_rel 테이블의 PK는 3개 컬럼으로 구성: (resoc_id, hist_str_date, hist_end_date)
- JPA에서 복합키를 사용하려면 별도의 ID 클래스가 필요
특징:
- @Embeddable: 다른 엔티티에 포함될 수 있는 클래스임을 표시
- Serializable 구현: JPA 복합키 요구사항
- equals()와 hashCode() 구현 필요: @EqualsAndHashCode로 자동 생성
쓰임:
- 엔티티의 고유 식별자 역할
- 엔티티 조회, 비교, 해싱 작업에 사용
- Repository에서 findById(ResocTopicRelId id) 형태로 사용
'#개발 > JPA' 카테고리의 다른 글
| JPA 메서드 네이밍 규칙 (0) | 2025.10.31 |
|---|---|
| Spring Data JPA Query Method (0) | 2025.10.23 |
