프로그래머스 백엔드 데브코스 TIL 36일차

Inchang Choi·2022년 5월 11일
0

백엔드 데브코스 TIL

목록 보기
21/30
post-thumbnail

학습목표

강의를 들으며 내가 알고 있는 내용을 점검하고,

새로 배운 내용을 정리하며,

궁금한 내용을 알아가며 학습해나가는 것을 목표로 합니다.

고급 매핑

JPA는 RDB의 테이블과 매핑된 객체(Entity)를 객체답게 사용할 수 있도록 여러가지 고급 매핑 전략을 제공해줍니다.

상속관계매핑

  • 조인테이블 전략
  • 싱글테이블 전략

@MappedSupserclass

식별자 클래스

JPA에서 식별자를 둘 이상 사용하려면 별도의 식별자 클래스를 만들어야 한다 .

JPA는 영속성 컨텍스트에 엔티티를 보관할때, eqauls & hashCode를 이용해서 동등성 비교를 한다

@IdClass

  • Serializable 인터페이스를 구현해야 한다.
  • eqauls, hashCode를 구현해야 한다.
  • 기본 생성자가 있어야 한다.
  • 식별자 클래스는 public 이어야 한다.

@EmbeddedId

  • Serializable 인터페이스를 구현해야 한다.
  • eqauls, hashCode를 구현해야 한다.
  • 기본 생성자가 있어야 한다.
  • 식별자 클래스는 public 이어야 한다.
  • @Embeddable 애노테이션이 있어야 한다.

프록시와 연관관계

객체그래프 탐색

객체는 객체 그래프로 연관된 객체를 탐색한다.

Entity는 객체가 데이터베이스(RDB)와 매핑되어 있어서 자유롭개 객체를 탐색하는데 제한이 있다.

// order.getMember() → orders 테이블과 member 테이블의 정보를 모두 가져와야 하는상태.

JPA는 프록시 객체라는 기술을 사용하여 연관된 객체를 처음부터 데이터베이스에서 조회하지 않고, 실제 사용하는 시점에 조회할 수 있다.

프록시의 특징

  • 프록시 객체는 처음 사용할 때 한번만 초기화 된다.
  • 프록시 객체가 초기화되면, 프록시 객체를 통해서 실제 엔티티에 접근 할 수 있다.
  • 초기화는 영속성 컨텍스트의 도움을 받아야 가능하다. 따라서 준영속 상태의 프록시를 초기화하면 LazyInitializationException 예외가 발생한다.

지연로딩(LAZY) & 즉시로딩(EAGER)

지연로딩

엔티티를 조회할때, 연관된 엔티티를 함께 조회한다.

LAZY FETCH

즉시로딩

연관된 엔티티를 실제 사용할 때 조회한다.

EAGER FETCH

영속성 전이(CASCADE)

특정 엔티티를 영속 상태로 만들 때, 연관된 엔티티도 함께 영속상태로 만들고 싶을때, 사용한다.

고아객체

부모 엔티티와 연관관계가 끊어진 자식 엔티티를 자동으로 삭제하는 기능이다.

SPRING DATA JPA

스프링에서 JPA를 편리하게 사용할 수 있도록 지원하는 프로젝트이다.

  • 데이터 소스 및 엔티티 매니저 트랜잭션 매니저 설정을 자동으로 해준다.
spring:
  datasource:
    driver-class-name: org.h2.Driver
    url: jdbc:h2:~/order;DB_CLOSE_ON_EXIT=FALSE
    username: sa
    password:

  jpa:
    open-in-view: false
    hibernate:
      ddl-auto: create-drop
    show-sql: true
    properties:
      hibernate.format_sql: true
  • 데이터 저장계층에 대한 인터페이스를 지원해줘서, CRUD 작업을 편리하게 할 수 있다.
profile
always positive

0개의 댓글