Notice
Recent Posts
Recent Comments
Link
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

지우쓰 개발일기

[JPA] 복합키와 식별관계 Mapping 본문

Spring Boot/JPA

[JPA] 복합키와 식별관계 Mapping

jiwoo-kimm 2020. 9. 13. 01:26

본 포스팅은 자바 ORM 표준 JPA 프로그래밍 (김영한 저)을 읽고 정리한 내용입니다.

 

자바 ORM 표준 JPA 프로그래밍

에이콘 오픈 소스 프로그래밍 시리즈. 이 책은 JPA 기초 이론과 핵심 원리, 그리고 실무에 필요한 성능 최적화 방법까지 JPA에 대한 모든 것을 다룬다.

www.aladin.co.kr

 


💡 데이터베이스 설계의 관점, 그리고 객체 관계 매핑의 관점 모두 필수적 비식별 관계를 선호한다.

 

비식별 관계


  • 필수적 비식별 관계 (Mandatory) : 연관관계를 필수적으로 맺어 FK에 NULL을 허용하지 않는다.
  • 선택적 비식별 관계 (Optional) : 연관관계를 선택적으로 맺어 FK에 NULL을 허용한다.
@IdClass
  • 별도의 식별자 클래스를 생성한다.

  • 엔티티 클래스에 PK1, PK2를 모두 필드로 가진다.
  • 필수 조건

    • 식별자 클래스의 속성명과 엔티티에서 사용하는 식별자의 속성명이 같아야 한다.

    • Serializable interface를 구현해야 한다.

    • equals, hashCode를 구현해야 한다.

    • 기본 생성자가 있어야 한다.

    • 식별자 클래스는 public이어야 한다.

    • 식별자 클래스를 사용하는 클래스에 @IdClass(식별자.class) annotation을 붙여야 한다.
@EmbeddedId
  • 별도의 식별자 클래스를 생성한다.

  • 엔티티 클래스에 식별자 클래스 객체를 필드로 가진다.

  • 필수 조건

    • 식별자 클래스에 @Embeddable annotation을 붙여야 한다.

    • Serializable interface를 구현해야 한다.

    • equals, hashCode를 구현해야 한다.

    • 기본 생성자가 있어야 한다.

    • 식별자 클래스는 public이어야 한다.

 

식별 관계


  • 상위 테이블의 PK를 받아 하위 테이블의 PK + FK로 사용하는 관계
@IdClass
  • 별도의 식별자 클래스를 생성한다.
  • 식별자 매핑인 @Id와 연관관계 매핑인 @ManyToOne을 같이 사용한다.
@EmbeddedId, @MapsId
  • 별도의 @Embeddable 식별자 클래스를 생성한다.

  • 식별자 매핑인 @EmbeddedId와 연관관계 매핑인 @MapsId을 같이 사용한다.

  • @MapsId의 속성 값은 PK의 필드명이다.

 

1:1 식별 관계


  • 상위 테이블의 PK를 받아 하위 테이블의 단일 PK + FK로 사용하는 관계
@MapsId
  • 복합키가 아니면 식별자 클래스를 생성할 필요가 없다.

  • 식별자 매핑인 @Id와 연관관계 매핑인 @MapsId을 같이 사용한다.

  • PK가 복합키가 아니면 @MapsId의 속성 값은 비워 둔다.

'Spring Boot > JPA' 카테고리의 다른 글

[JPA] @SecondaryTable  (0) 2020.09.13
[JPA] Join Table  (0) 2020.09.13
[JPA] 상속관계 Mapping  (0) 2020.09.13
[JPA] 연관관계 Mapping (2)  (0) 2020.09.12
[JPA] 연관관계 Mapping (1)  (0) 2020.09.10
Comments