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;