BananMoon / TIL

TIL : Today I Learned
0 stars 0 forks source link

[Spring Boot, JPA] 다중 PK (복합 키)를 설정할 수 있다. #9

Open BananMoon opened 2 months ago

BananMoon commented 2 months ago

Spring 에서는 아래와 같이 PK인 필드들을 별도의 클래스로 생성하고, PK 클래스를 엔티티 클래스 내 필드로 선언합니다.

@Embeddable 애노테이션을 사용하는 방식과 @IdClass 애노테이션을 사용하는 방법이 있습니다.

1. @Embeddable 애노테이션 이용

복합 키 클래스에 @Embeddable 을 선언한다. 엔티티에는 @EmbeddedId 애노테이션이 추가된 클래스를 필드로 선언한다.

@Setter // 필요??
@Getter // 필요??
@Embeddable
class MultiPK implements Serializable {
  private Long seq;
  private String name;

}
@Entity
class Entity {
  @EmbeddedId
  private MultiPK id;

  private String phone;
}
  1. @IdClass 애노테이션 이용 엔티티에 @IdClass 애노테이션 추가. 유의할 점. 복합 키들의 필드 이름이 MultiPK 클래스의 필드 이름과 동일해야 한다.

@Setter // 필요??
@Getter // 필요??
class MultiPK implements Serializable {
  private Long seq;
  private String name;
}

@Entity
@IdClass(MultiPK.class)
class Entity {
  @Id
  private Long seq;
  @Id
  private Long name;

  private String phone;
}

참고 다중 PK의 필드도 JPA의 메서드 명명 규칙을 이용해 선언할 수 있습니다.