Database ( DB )/JPA, Querydsl

jpa entity에 복합키 사용하는 방법

노루아부지 2022. 4. 17. 22:25
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.IdClass;
import lombok.Getter;
import lombok.Setter;

@Entity
@Getter
@Setter
@IdClass(UserGroupPK.class)
public class UserGroup {
  @Id
  private String groupId;
  @Id
  private String userId;
}
import java.io.Serializable;
import lombok.Data;

@Data
public class UserGroupPK implements Serializable {
  private String groupId;
  private String userId;
}

.

 

JPA Entity에서 복합키를 사용할 때 다음과 같은 규칙을 지켜야 합니다.

  • PK(primary key)에 해당하는 컬럼 모두에 @Id 어노테이션을 사용해야 한다.
  • PK를 선언할 클래스를 생성해야 한다.
  • PK 클래스는 Serializable의 구현체여야 한다.
  • PK 클래스를 @IdClass 어노테이션을 사용해서 지정해야 한다.

 

 

[참고사항]

만약 PK 클래스에 Serializable이 없는 경우는 다음과 같은 에러가 발생합니다.

Caused by: org.hibernate.MappingException: Composite-id class must implement Serializable:

 

 

728x90
loading