본문 바로가기

Spring

Spring JPA @Id 복합키 설정

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