관리 메뉴

개발하는 동그리

[JPA] 이론 정리 본문

IT 정보/Spring

[JPA] 이론 정리

개발하는 동그리 2022. 7. 29. 20:58
반응형

JPA (Java Persistence

  • ORM (객체 관계 매핑) 으로 객체와 관계형DB를 각각 설계해서 매핑
  • 인터페이스의 모음 ( 구현체 : 하이버네이트.. 등등 )
  • SQL 중심 개발 -> 객체 중심 개발

JPA CRUD

  • 저장 : jpa.persist(member) 
  • 조회 : Member member = jpa.find(memberId)
  • 수정 : member.setName("변경할 이름")
    • 수정하면 자동으로 DB 업데이트 
  • 삭제 : jpa.remove(member) 

JPQL (객체 지향 쿼리)

  • SQL을 추상화한 JPQL 객채지향 쿼리 언어
  • 엔티티 객체를 대상으로 쿼리 ( SQL은 데이터베이스 테이블 대상 )
  • SQL 문법과 유사
  • 애플리케이션에 필요한 데이터만 DB에서 부르기 위해 검색조건이 포함된 SQL ⭐
  • 페이지 ( .setFirstResult / .setMaxResult )

영속성 컨텍스트 

  • Entity를 영구적으로 저장하는 환경 
  • 방법 : EntityManager.persist(entity); <--- Entity 멤버를 영속성 컨텍스트에 저장
    • 1차 캐시
    • 한 트랜잭션이 끝나면 영속성 컨텍스트를 지움 (1차 캐시가 사라짐)
    • DB에서 데이터를 꺼내면 영속성 컨테이너에 저장됨
  • 데이터 변경시 트랜잭션 시작할 것 
  • 트랜잭션은 커밋할 때 INSERT SQL을 데이터 베이스에 보낸다. 
    • 쓰기 지연 SQL 저장소
      • JPA가 1차캐시에 들어온 Entity를 INSERT SQL생성해서 쓰기 지연 저장소에 저장
      • transaaction.comit 하면 저장소에 있는 데이터들이 flush하면서 SQL넘어간다.
      • 실제 DATA BASE TRANSACTION도 동시에 일어난다.  
  • 최초로 영속성 컨텍스트에 저장될 때 스냅샷을 저장 (불러오거나 등록할 때)
  • commit 되는 시점에 flush() 하면서 스냅샷과 현재값을 비교해서 바뀌었으면 SQL 저장소에 저장하고 반영하고 커밋한다. 

플러시 (flush)

  • 컨텍스트의 변경내용을 데이터 베이스에 반영
  • 변경 감지 (수정된 엔티티 쓰지 지연 SQL 저장소에 등록)
  • 쓰기 지연 SQL 저장소의 쿼리를 데이터 베이스에 전송 (등록, 수정, 삭제)
    • em.flush() -- 직접 호출
    • 트랜잭션 커밋 -- 플러시 자동 호출
    • JPQL 쿼리 실행 -- 플러시 자동 호출

준영속 상태

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

@Entity

  • JPA가 관리하는 객체 (데이터 테이블과 매핑)
  • 기본값은 클래스 이름 그대로
  • JPA는 내부적으로 리프렉션을 쓰기 때문에 동적으로 객체를 생성해야 한다. 따라서 기본생성자가 필요하다. ⭐⭐⭐⭐

@Table

  • name = Table 이름

 

반응형