250x250
jhs0129
프로그래밍
jhs0129
전체 방문자
오늘
어제
  • 분류 전체보기
    • 자격증
      • SQLD
      • 정보처리기사
    • 프로젝트
      • html csss js - todolist
      • JSP 방명록
      • 졸업작품
    • 공부기록
      • Java
      • Spring
      • Spring Security
      • Algorithm
      • JPA
      • DB
      • Servlet JSP
      • html
      • 기술공유
    • 잡다한 생각

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • Spring Security Login
  • AWS
  • github
  • JPA
  • spring
  • spring boot
  • cicd
  • EC2
  • 스프링시큐리티
  • NHN Cloud
  • 스프링 프레임워크
  • 스프링
  • spring framework
  • nhn cloud 강의
  • 프로젝트
  • spring data jpa
  • codedeploy
  • oAuth2
  • Spring Security
  • rest docs

최근 댓글

최근 글

티스토리

반응형
hELLO · Designed By 정상우.
jhs0129

프로그래밍

공부기록/JPA

JPA-프록시

2022. 1. 26. 13:40
320x100
반응형

프록시

실제 클래스를 상속받아서 만들어진 가짜 객체

객체를 DB에서 찾을 때와는 다르게 em.persist()가 아닌 em.getReference()를 이용해서 조회를 한다 메서드명에서 보는거와 같이 무언가(실제 객체)를 참조를 하고 있는 객체이다

프록시 객체는 getXXX()처럼 실제로 처음 사용이 될때 값이 초기화가 된다

이미 영속성 컨텍스트에 찾는 객체가 있으면 실제 엔티티 반환된다

초기화 과정

  1. getXXX()처럼 실제로 사용
  2. 영속성 컨텍스트에 초기화 요청
  3. DB조회
  4. 실제 Entity생성
  5. 실제 객체를 참조하고 있는 target.getXXX()실행

org.hibernate.Hibernate.initialize(프록시객체);을 이용하여 강제로 직접 초기화 할 수 있다

즉시로딩 지연로딩

설정 방법

@XXXToXXX(fetch = FetchType.EAGER) - 즉시로딩

@XXXToXXX(fetch = FetchType.LAZY) - 지연로딩

즉시로딩

해당 객체를 조회하면 참조하는 객체도 같이 JOIN문을 이용하여 한번에 조회

이때 JOIN은 Left outter join(선택적 관계로 적용)이 이용된다

left outer join이 아닌 inner join을 사용을 원한다면 아래 두 코드중 하나를 선택하여 사용하면 된다

  • @ManyToOne(fetch = EAGER, optional = false)
  • @JoinColumn(nullable = false)

지연로딩

해당 객체를 조회하면 fk로 참조하는 객체는 조회하지 않고 나중에 실제로 사용시 조회

이때 참조하는 객체는 프록시 객체로 초기화 되지 않은 상태로 넣어둔다

기본 패치 전략

@XXXToOne - 즉시로딩
@XXXToMany - 지연로딩

영속성 전이

DataBase를 공부할 때 참조 무결성 조건을 지키기 위해서 사용한 on delete cascade와 같다고 생각 하면된다

on delete cascade는 참조되는 테이블에서 행이 삭제되면 참조 무결성 조건을 지키기 위해서 참조하는 테이블의 행도 삭제를 하도록 하는 것이다

이에 맞게 JPA에서는 @OneToMany(cascade = CascadeType.REMOVE)와 같이 cascade를 시켜준다

Cascade 종류

  • ALL: 모두적용
  • PERSIST: 영속
  • REMOVE: 제거
  • MERGE: 병합
  • REFRESH: Refresh
  • DETACH: Detach

REMOVE는 orphanRemoval = true조건을 준것과 동일한데 orphanRemoval는 부모 객체가 삭제 되었을때 자식객체도 같이 제거를 하도록 하는 것이다

참고

자바 ORM 표준 JPA 프로그래밍 - 기본편_김영한 님 강의

https://www.inflearn.com/course/ORM-JPA-Basic

320x100

 

 

자바 ORM 표준 JPA 프로그래밍 - 기본편 - 인프런 | 강의

JPA를 처음 접하거나, 실무에서 JPA를 사용하지만 기본 이론이 부족하신 분들이 JPA의 기본 이론을 탄탄하게 학습해서 초보자도 실무에서 자신있게 JPA를 사용할 수 있습니다., - 강의 소개 | 인프런

www.inflearn.com

책 - 자바 ORM 표준 JPA 프로그래밍

http://www.kyobobook.co.kr/product/detailViewKor.laf?mallGb=KOR&ejkGb=KOR&barcode=9788960777330

 

자바 ORM 표준 JPA 프로그래밍 - 교보문고

스프링 데이터 예제 프로젝트로 배우는 전자정부 표준 데이터베이스 프레임 | ★ 이 책에서 다루는 내용 ★■ JPA 기초 이론과 핵심 원리■ JPA로 도메인 모델을 설계하는 과정을 예제 중심으로

www.kyobobook.co.kr

 

320x100
반응형

'공부기록 > JPA' 카테고리의 다른 글

JPA-JPQL  (0) 2022.01.28
JPA-값타입  (0) 2022.01.27
JPA-고급매핑2  (0) 2022.01.20
JPA 고급매핑1  (0) 2022.01.20
JPA 연관관계 매핑  (0) 2021.12.29
    '공부기록/JPA' 카테고리의 다른 글
    • JPA-JPQL
    • JPA-값타입
    • JPA-고급매핑2
    • JPA 고급매핑1
    jhs0129
    jhs0129
    공부기록 남기기

    티스토리툴바