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가 없다고 하는 에러가 해결되었습니다.
오늘도 한개를 알게되었네요
즐거운 코딩되세요.
No auto configuration classes found in META-INF/spring.factories jar 실행 오류 (0) | 2021.12.20 |
---|---|
SpringBoot Vue 3 환경설정 (0) | 2021.12.03 |
SpringBoot maven-plugin not found 시 에러 대처법 (5) | 2021.04.08 |
JSTL 문자열 비교 (0) | 2020.11.30 |
Java split pipe character error 해결법 (0) | 2020.11.17 |