@IdClass, @EmbbedId 복합키 사용

Seung jun Cha·2023년 4월 27일
0

JPA에서 식별자(@Id)를 둘 이상 사용하려면 별도의 식별자 클래스를 만들어야 한다.

  • 복합키를 사용하는 경우는 다음이 있다
  1. 매핑 테이블 : 연결된 각 테이블의 기본 키를 모두 가져와서 이를 복합 식별자로 사용한다.
  2. 히스토리 테이블 : 데이터의 이력을 관리하는 테이블에서는 특정 데이터의 변경 내용을 추적할 때, 해당 데이터의 기본 키와 이력을 기록한 날짜 등을 복합 식별자로 사용한다.
  • 복합키를 매핑하기 위한 클래스는 다음과 같은 조건을 지켜야한다.
@Getter
@Setter
@ToString
public class UserGroupMappingId implements Serializable {
    private String userGroupId;
    private String userId;
}
  1. public 클래스일 것
  2. 기본 생성자 필수
  3. 엔티티 클래스에서 작성한 필드 명과 동일하게 작성할 것
    (컬럼명이 아님에 주의)
  4. Serializable을 구현해야 함
  5. equals와 hashCode를 구현해야 함

그리고 복합 키를 사용하면 @GeneratedValue를 사용할 수 없다. 무조건 식별자 값을 입력해주어야 한다.

@Entity
@Table(name = "user_group_mapping")
@IdClass(UserGroupMappingId.class)  // 복합키 클래스
public class UserGroupMapping extends BaseEntity {

    @Id
    private String userGroupId;
    @Id
    private String userId;

    private String userGroupName;
    private String description;
}

0개의 댓글