spring boot/JPA - 기본

JPA - 기본 개념과 영속성

ballde 2021. 10. 18. 17:18

ORM이란

  • object relational mapping 즉 객체 관계 매핑이다.
    • 자바에서 데이터베이스 관계들을 객체로 설계하고 데이터베이스에서는 관계형 데이터 베이스로 설계해서 매핑시켜줌

JPA란

  • java persistence API의 약자
  • 자바 진영의 ORM 표준으로 인터페이스 모음
  • JPA를 구현한게 Hibernate

JPA 특징

** JPA의 모든 데이터 변경은 트랜잭션 안에서 실행되어야 합니다.

 

엔티티 매니저 팩토리와 엔티티 메니저의 관계

엔티티 매니저 팩토리가 앤티티 매니저들을 생성해서 db 커넥션

 

그리고 엔티티매니저에는 영속성컨텍스트란게 존재한다. 

영속성애플리케이션과 데이터베이스 사이에서 객체를 보관하는 가상의 데이터베이스 같은 역할

비영속
준영속 em.detach(member)
영속 em.persist(member)
-> 영속 상태가 됨

영속성의 장점 - Application 과 DB와의 중간에 무언가가 있음

  • 캐시
    • 1차 캐시에 저정하고 그 캐시에서 조회함
  • 영속 엔티티의 동일성 보장
  • 변경 감지
  • 지연 로딩(LAZY)

1. em.find()로 찾을 때 1차 캐시에서 찾음.

  • 만약 있다면 쿼리를 날리지 않고 1차 캐시에서 가지고 옴
  • 만약 없다면 db에서 찾아서 1차 캐시에 넣음

2. 변경 감지

  • 영속성 컨텍스트를 commit 할 때 내부적으로 엔티티와 스냅샷을 비교한다. 
Member member = em.find('member1')
member.setName("hello")
  • 만약 스냅샷과 비교해서 바뀐게 있다면 업데이트 쿼리를 날림

플러시(flush)

  • db에 반영하는 명령어라고 생각하면 된다. 
em.flush()

flush가 작동 되는 경우

1. em.flush()

2. commit

3. 직접 쿼리 날리기 

준영속

em.detach(entity) - 특정 엔티티만 준영속 상태로 전환
em.clear()        - 영속성 컨텍스트를 완전히 초기화
em.close()        - 영속성 컨텍스트를 종료//

 

'spring boot > JPA - 기본' 카테고리의 다른 글

JPA - proxy(프록시)  (0) 2021.11.13
JPA - 상속관계 매핑  (0) 2021.11.08
JPA - 연관관계 매핑(2)  (0) 2021.11.08
JPA - 연관관계 매핑  (0) 2021.10.26
jpa - 엔티티 매핑  (0) 2021.10.21