기본 Entity 클래스와 복합 기본키를 표현하기 위한 PK 클래스를 정의해야 함
- public, 기본 생성자가 있어야 함
- implements Serializable
- equals와 hashCode를 오버라이딩 해야 함
- @EmbeddedId, @IdClass 둘 중 하나로 사용 가능
- EmbeddedId가 IdClass 방식보다 더 객체지향적인 방식임
- 명시적으로 확인하기는 더 어려움
- 하나의 복합키만 존재 -> EmbeddedId, 매핑이 많이 존재 -> IdClass
@IdClass
PK 클래스
- Serializable을 implements한다
- 복합키 사용하면 직렬화를 해줘야 함
@Data
@NoArgsConstructor
public class ProjectInterestRelationId implements Serializable {
private Long project;
private int interest;
}
Entity 클래스
- @IdClass로 어떤 클래스가 PK 클래스인지 명시해 준다
@Entity
@Table(name = "project_interest_relation")
@Data
@ToString
@AllArgsConstructor
@NoArgsConstructor
@IdClass(ProjectInterestRelationId.class)
public class ProjectInterestRelation {
@Id
@ManyToOne(cascade = CascadeType.REMOVE)
@JoinColumn(name = "prj_id")
private Project project;
@Id
@ManyToOne(cascade = CascadeType.REMOVE)
@JoinColumn(name = "in_id")
private Interest interest;
}