JPA 기초 1 - 1 단방향 연관 관계

2024. 1. 19. 17:08·JPA
본 내용은 유튜브 최범균님의 강의 내용을 정리한 내용입니다.
JPA 기초 14 엔티티 간 1-1 단방향 연관 매핑
주의사항!!
연관 매핑은 진짜 필요한 경우에 만 사용해야 합니다.
- 연관된 객체 탐색이 쉽다는 이유로 사용하지 않습니다.
- 조회 기능은 별도 모델을 만들어 구현합니다. (CQRS)

1. 참조키 방식 1 - 1 단방향 연관 매핑

  • @OneToOne 어노테이션은 두 엔터티 사이의 일대일 관계를 매핑하는 데 사용됩니다.
  • @OneToOne 어노테이션은 기본적으로 FetchType.Eager 입니다.
  • @JoinColumn 어노테이션은 외래 키(Foreign Key)를 지정할 때 사용됩니다.
package com.example.jpa.entity;

...

@Data
@NoArgsConstructor
@Entity
public class MembershipCard {
    @Id
    @Column(name = "card_no")
    private String number;

    @OneToOne // 1대1 연관 관계 지정
    @JoinColumn(name = "user_email") // 조인 시 참조할 컬럼 지정
    private User owner;
    @Column(name = "expiry_date")
    private LocalDateTime expiryDate;
    private Boolean enabled;

    ...
}

 

  • @OneToOne 어노테이션은 owner 필드가 1:1 연관 관계를 가짐을 명시합니다.
  • @JoinColumn(name = "user_email") 어노테이션은 조인할 때 사용할 FK(Foreign Key) 컬럼의 이름을 지정합니다.

엔티티 조회

MembershipCard foundCard = entityManager.find(MembershipCard.class, "8888111122223333");
System.out.println(foundCard.getOwner());

LEFT JOIN 으로 조회

2. 식별자 공유 방식 1 - 1 단방향 연관 매핑

  • @PrimaryKeyJoinColumn 어노테이션은 기본 키를 사용하여 두 엔터티 간의 일대일 관계를 매핑할 때 외래 키를 기본 키에 매핑하는 데 사용됩니다.
package com.example.jpa.entity;

...

@Data
@NoArgsConstructor
@Entity
@Table(name = "best_pick")
public class BestPick {
    @Id
    @Column(name = "user_email")
    private String email;

    @OneToOne
    @PrimaryKeyJoinColumn(name = "user_email") // 조인 시 사용할 best_pick 테이블의 PK 컬럼 명시
    private User user;
    private String title;

    public BestPick(User user, String title) {
        this.email = user.getEmail();
        this.user = user;
        this.title = title;
    }
}
  • User 엔티티와 BestPick 엔티티는 같은 ID를 사용하고 있습니다.
  • 그래서 @PrimaryKeyJoinColumn 어노테이션을 사용하여 Join시 참조할 PK 컬럼을 지정해줍니다.

 

'JPA' 카테고리의 다른 글

Spring JPA - 회원 엔티티, 서비스, 레포지토리 구현  (1) 2024.01.23
JPA 기초 - 엔티티 1 - N 단방향 연관관계  (0) 2024.01.22
JPA 기초 - 값 컬렉션 Map 매핑  (0) 2024.01.18
JPA 기초 - 값 컬렉션 List 매핑  (0) 2024.01.18
JPA 기초 - 값 컬렉션 Set 매핑  (0) 2024.01.18
'JPA' 카테고리의 다른 글
  • Spring JPA - 회원 엔티티, 서비스, 레포지토리 구현
  • JPA 기초 - 엔티티 1 - N 단방향 연관관계
  • JPA 기초 - 값 컬렉션 Map 매핑
  • JPA 기초 - 값 컬렉션 List 매핑
PortLee
PortLee
  • PortLee
    프로그래밍 공부
    PortLee
  • 전체
    오늘
    어제
    • 분류 전체보기
      • C++
      • JAVA
      • JPA
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    MemberEntity
    Entity 연관관계
    SQL Mapping
    @Table
    set
    @Access
    컬렉션 매핑
    기본키 매핑
    식별자공유
    allocationSize
    map
    @Basic
    persistence.xml
    1-N
    list
    MemberService
    Translent
    @Embeddable
    1-1연관관계
    JPA
    다른 테이블 매핑
    JoinColumn
    MemberRepository
    컬랙션 매핑
    @CollectionTable
    @AttributeOverride
    entity mapping
    필드와 컬럼 매핑
    Entity
    Table 기본키 생성 전략
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
PortLee
JPA 기초 1 - 1 단방향 연관 관계
상단으로

티스토리툴바