TIL
JPA 에서 복합키 사용하기
dbssk
2023. 8. 6. 05:14
id가 겹치고 mediaType이 다른 경우가 있어 id와 mediaType을 모두 primary Key로 사용하려고 하였다. 이를 위해 복합키를 사용하기로 하였다.
복합키 사용방법
1. @IdClass
@Data
public class ContentKey implements Serializable {
private long id;
private String mediaType;
}
@Data
@Entity
@Table(name = "content")
@IdClass(ContentKey.class)
public class Content {
@Id
private long id;
@Id
private String mediaType;
}
2. @Embeddable
@Data
@Embeddable
public class ContentKey implements Serializable {
private long id;
private String mediaType;
}
@Data
@Entity
@Table(name = "content")
public class Content {
@EmbeddedId
private ContentKey contentKey;
}
이렇게 복합키를 사용하기로 정했으면 이 테이블과 연결되는 테이블에도 복합 외래키를 생성해주어야 한다.
@JsonManagedReference
@ManyToOne
@JoinColumns({
@JoinColumn(name = "content_id", referencedColumnName = "id", nullable = false),
@JoinColumn(name = "content_type", referencedColumnName = "mediaType", nullable = false)
})
private Content content;