hoony's web study

728x90
반응형


JPA에서 Entity 를 보면 PK를 사용하는 것에 @Id annotation을 명시하여 사용하였다. 
하지만 실무에서 보면 테이블에 많은 복합키로 구성이 되어있으므로 한개의 @Id 를 가지고 하는것은 불가능하다. 

복합키를 구성할때 조건 

1. @EmbeddedId or @IdClass의 annotation 을 명시해야한다.
2. @NoArgsConstructor 
3. Serializable  를 Implement
4.  @EqualsAndHashCode 

이번 포스팅에서는 @IdClass의 사용법만 포스팅합니다.
안 쓰던 JPA를 사용하다보니 실행하다가 안 되는것을 찾으면서 진행한 것입니다.
혹시라도 제가 잘못 명시한게 있으면 알려주세요.

테이블과 관련된 PK Class따로 생성 

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;

import java.io.Serializable;

@Data
@EqualsAndHashCode
@NoArgsConstructor
@AllArgsConstructor
public class SfCmmncdDetailPK implements Serializable {


    private String cmmncdId;
    private String detailId;
}


위와 같이 명시한 것을 본  Entity 에 사용하는 것은 

@Data
@Entity
@EqualsAndHashCode  //필수
@NoArgsConstructor
@AllArgsConstructor
@Table(name = "sf_cmmncd_detail")
@IdClass(SfCmmncdDetailPK.class)
public class SfCmmncdDetail implements Serializable {
  --- 중략 
}

이렇게 구성을 하니 IdClass가 없다고 하는 에러가 해결되었습니다.
오늘도 한개를 알게되었네요 
즐거운 코딩되세요. 


728x90

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading