JPA 복합 키

@Embeddable & @EmbeddedId

  • 복합 키를 위한 클래스를 @Embeddable 어노테이션을 사용하여 생
@Embeddable
@Data
public class MyCompositeKey implements Serializable {
    private String name;
    private String email;
}
  • 복합키를 위한 클래스 MyCompositeKey
    • Serializable 인터페이스를 구현해야함.

    // 기본 생성자, getter, setter, equals, hashCode 구현해야함

@Entity
@Getter
class MyEntity {
    @EmbeddedId
    private MyCompositeKey myCompositeKey;
}
  • @EmbeddedId 를 선언한 식별자 클래스는
    • 기본 키를 직접 name 와 email 의 복합키로 할당합니다.
    • 또한

    의 구조로 테이블이 생성됩니다.

@IdClass

@AllArgsConstructor
@EqualsAndHashCode
public class MyCompositeKey implements Serializable {
    private String name;
    private String email;
}

@Entity
@Getter
@IdClass(MyCompositeKey.class)
class MyEntity {
    @Id
    private String name;
    @Id
    private String email;
}
  • 관계형 DB 스러운 모습으로 바뀐다.

왜 복합키는 equals + hashcode 를 구현해야하는가?

  • 엔티티 간의 비교를 수행하는 경우
  • equals 와 hashcode 를 통해 객체간의 비교를 하게 된다.
  • 만약 올바르게 해당 equals .. 등을 선언하지 않았더라면,
    • 두 객체가 같다고 생각할수없을 것임


Uploaded by N2T