반응형
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
반응형
'Database ( DB ) > JPA, Querydsl' 카테고리의 다른 글
jpa + querydsl + sqlite 페이징 처리 방법 (0) | 2022.10.04 |
---|---|
JPA에서 insert, update, delete 할 때 자동으로 select 하지 않게 하는 방법 (0) | 2022.09.11 |
querydsl 5.0 - fetchResult, fetchCount deprecated (2) | 2022.04.17 |
[JPA] Entity Column 상속 (0) | 2022.04.17 |
QueryDSL - order by count as alias (2) | 2022.03.01 |