본문 바로가기
TIL

TIL내일배움캠프 13주차 JPA심화 JPA 테이블 매핑

by 율량동박씨 2024. 7. 8.

오늘의 키워드

  • JPA 테이블 매핑
  • 엔티티 객체 관리
  • 연관관계 매핑
  • Cascade
  • orphanRemoval
  • FetchType

오늘의 내용

  •  JPA 테이블 매핑 기능
  • @Entity
    • 객체 관점에서의 이름을 지정
    • 디폴트로 클래스명으로 설정됨
    • 엔티티의 이름은 JQL(JPA Query Language)에서 사용됨
  • @Table
    • RDB 테이블의 이름을 지정
    • 디폴트로 @Entity의 이름이 테이블 이름으로 사용됨
    • 주로 Entity 이름과 다르게 지정하고 싶을 때 사용
  • @Id
    • 엔티티의 주키를 매핑
    • 자바의 모든 primitive 타입과 그 랩퍼 타입을 사용할 수 있음
    • 복합키 매핑도 가능
  • @GeneratedValue
    • 주키의 생성 방법을 매핑
    • 생성 전략과 생성기를 설정 가능
  • @Column
    • unique, nullable, length, columnDefinition 등의 옵션을 설정 가능
    • 클래스에 @Entity가 붙으면 자동으로 필드들에 @Column이 붙음
  • @Temporal
    • Date와 Calendar 타입을 매핑할 때 사용
  • @Transient
    • 칼럼으로 매핑하고 싶지 않은 멤버 변수에 사용
  • @Enumerated
    • Enum 매핑용도로 사용
    • 실무에서는 @Enumerated(EnumType.STRING)으로 사용 권장
  • @Embeddable
    • 복합 값 객체로 사용할 클래스 지정
  • @Embedded
    • 복합 값 객체를 적용할 필드 지정
  • @AttributeOverrides, @AttributeOverride
    • 복합 값 객체 여러 개 또는 특정 필드명 선언을 위해 사용
  •  테이블 객체 간 관계 매핑
    • @OneToOne
      • 일대일 관계를 나타내는 매핑 정보
      • 의도적 중복이 아니면 사용하지 않음
      • 물리적으로 테이블이 분리될 필요가 있는지 고려 필요
    • @OneToMany
      • 일대다 관계를 나타내는 매핑 정보
      • 단방향으로 쓰이면 문제가 발생 가능
      • 기본 FetchType 설정이 Lazy
    • @ManyToOne
      • 다대일 관계를 나타내는 매핑 정보
      • 기본 FetchType 설정이 EAGER
  • @JoinColumn
    • 외래 키 매핑 시 사용
    • @ManyToOne과 주로 함께 사용
    • 생략해도 외래 키가 생성됨
  • @ManyToMany
    • 다대다 관계를 나타냄.
    • 중간 매핑 테이블이 자동으로 생성되지만 잘 사용하지 않음
    • 직접 구현을 위해서는 @OneToMany, @ManyToOne 매핑을 사용
  • 3. JPA를 사용한 엔티티 객체 관리 방법
    • Cascade(영속성 전이)
    • 연관 관계의 주인 반대편에 사용(@OneToMany, @OneToOne)
    • 양쪽 엔티티의 라이프사이클이 동일하거나 비슷해야 함
    • Cascade 타입: ALL, PERSIST, REMOVE, MERGE, REFRESH, DETACH
  • orphanRemoval(고아 객체 제거)
    • @OneToMany, @OneToOne 부모 엔티티에 사용
    • 부모 객체에서 리스트 요소 삭제 시 해당 자식 객체도 삭제
    • orphanRemoval=true는 리스트 요소로서 영속성 전이도 해줌
  • orphanRemoval=true + Cascade.ALL
    • 자식 엔티티의 라이프 사이클이 부모 엔티티와 동일해짐
    • 자식 엔티티의 레포지토리 없이 생명주기를 관리 가능
  • Fetch(조회 시점)
    • Entity에 FetchType 설정 가능
    • 기본 LAZY 설정 후 필요할 때 fetch join 수행
    • 항상 같이 쓰이는 연관 관계만 EAGER 설정
    • FetchType 옵션: EAGER(즉시 로딩), LAZY(지연 로딩)

오늘의 회고

오늘 JPA의 테이블 매핑 기능과 엔티티 객체 관리 방법에 대해 학습했는데 특히 다양한 매핑 애너테이션과 연관 관계 설정 방법에 대해 자세히 알게 되었습니다. 이를 실제 프로젝트에 적용하여 데이터베이스와의 상호 작용을 더 효율적으로 관리할 수 있으면 좋겠지만 현실적으로 가능할지는......