728x90
Spring JPA를 사용하면서 기본키가 2개 이상 컬럼으로 구성된 테이블을 Entity로 지정할 때가 있다.
예시로 아래와 같은 Work 테이블과 WorkE 엔티티 클래스가 있다고 가정했을때
@Table(name = "Work")
public class WorkE {
@Id
@Column(name = "name")
private String name;
@Id
@Column(name = "type")
private String type;
....
}
이름(name)과 구분(type) 두개의 컬럼을 기본키로 사용하고 있는 경우,
위처럼 두 필드에 모두 @Id 어노테이션을 사용하면 된다고 생각할 수 있다.
하지만 추가해야할 것이 있는데,
아래처럼 엔티티에 @IdClass 어노테이션을 추가해줘야한다.
@IdClass(WorkE.PK.class)
@Table(name = "Work")
public class WorkE {
@Id
@Column(name = "name")
private String name;
@Id
@Column(name = "type")
private String type;
....
public static class PK implements Serializable {
private String name;
private String type;
}
}
@IdClass에 기본키 형태의 클래스를 지정해줘야하기 때문에,
WorkE안에 PK라는 클래스를 추가로 넣었다.
이렇게 쓰면 잘된다.
728x90
'Spring' 카테고리의 다른 글
JPA 비관적 락 (Pessimistic Lock) (1) | 2024.10.03 |
---|---|
Spring Controller 중복 호출되는 이슈 (0) | 2024.07.28 |
Maven Jar 빌드 외부 dependency 추가 (0) | 2022.09.27 |
Spring Webflux Filter 적용 (Webfilter) (0) | 2022.08.28 |
Spring Webflux Exception 전역 처리 (Functional Endpoints) (0) | 2022.05.26 |