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 | 
