네로개발일기

개발자 네로의 개발 일기, 자바를 좋아합니다 !

반응형

테이블의 PK가 복합키로 이루어져 있다면 엔티티를 설계할 때 고려해야 한다.

 

* 복합키 설정 방법은 두가지가 존재한다.

1. @Embeddable 이용 

2. @IdClass 이용

 

@Embeddable 이용

CREATE TABLE year_user_score (
    year CHAR(4) NOT NULL,
    user_id BIGINT NOT NULL,
    score INTEGER,
    PRIMARY KEY (year, user_id)
);

year_user_score 테이블은 PK는 year와 user_id 두 개의 복합키로 이루어져 있다.

 

@EmbededId를 이용하여 엔티티를 설계할 때는 우선 Serializable 인터페이스를 구현한 클래스를 선언하고 필드에 복합키로 사용되는 칼럼을 선언하면 된다.

@Embeddable
public class ScoreId implements Serializable {
    
    @Column(name = "year")
    private String year;
    
    @Column(name = "user_id")
    private Long userId;
}

복합키 클래스를 생성했으니 엔티티와 결합해준다.

@Table(name = "year_user_score")
@Entity
public class Score {
    
    @EmbededId
    private ScoreId id;
    
    private int score;
}

 

@IdClass 이용

위와 같은 테이블이 존재한다.

 

Serializable 인터페이스를 구현한 PK 클래스를 선언하고 필드를 정의한다.

public class ScoreId implements Serializable {
    
    private String year;
    private Long userId;
}

엔티티 클래스에 @IdClass(ScoreId.class) 설정해준다.

@Table(name = "year_user_score")
@Entity
@IdClass(ScoreId.class)
public class Score {
    
    @Id
    @Column(name = "year")
    private String year; // ScoreId의 필드 이름이 동일해야 함.
    
    @Id
    @Column(name = "user_id")
    private Long id;
    
    private int score;
}
728x90
반응형
blog image

Written by ner.o

개발자 네로의 개발 일기, 자바를 좋아합니다 !