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;
'TIL' 카테고리의 다른 글
[TIL][SQL] @Modifying 어노테이션 (0) | 2023.11.08 |
---|---|
[TIL][SQL] 연관 데이터 없을 때 조회하기 (Join vs Left Join) (0) | 2023.11.08 |
[TIL][ContentProject] h2-console 403 error (0) | 2023.07.27 |
[TIL][ContentProject] H2 DB 에서 User Table 사용하기 (0) | 2023.07.19 |
[TIL][ReservationProject] Jwt 토큰 생성 에러 (0) | 2023.06.27 |