2주차 - 영속성 관리

하늘·2021년 1월 27일
0

h2 생성 시 오류가 날 경우

Database "C:/Users/사용자 계정/test" not found, either pre-create it or allow remote database creation (not recommended in secure environments) [90149-200] 90149/90149

오류가 나올 경우 해결 방법

  1. localhost:8082 뒤의 세션키는 놔 두고 접속해본다.

  2. jdbc:h2:tcp://localhost/~/test 나 jdbc:h2~/test로 접속한다

JPA 버전

- 사용하는 프로젝트 환경에 맞춰 사용하자
JPA도 버전이 있어 사용하는 Spring 버전에 따라 JPA 버전을 맞춰 사용하는 것이 오류가 적다.

버전은 Spring > Project > Spring Boot 로 들어가 reference > hibernate 버전을 보면

어떤 Spring에서 어떤 버전을 쓰는지가 나온다.

Dialect

<pre>  

<code>

 <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect">

</code>

</pre>

JPA는 특정 데이터베이스에 종속적이지 않고자 Dialect를 사용하며,

mySql, Oracle 등등 속성에 맞는 Dialect만 사용하면, Query를 변경할 필요가 없다.

영속성 관리

EntityManagerFactory는 웹 서버가 올라오는 순간 단 한번만 생성된다.

EntityManager는 고객 요청이 올 때마다 생성됐다가 사라진다.

EntityManager는 쓰레드 간 공유는 절대로 하면 안된다.

JPQL

JPA를 사용할 때 엔티티 객체를 중심으로 개발하는데

검색 할 때도 엔티티 객체를 대상으로 검색하게 된다.

이때 모든 DB 데이터를 객체로 변환해서 검색하는 것이 불가능하기 때문에

검색 조건이 포함된 SQL이 필요하며, 이때 필요한 것이 JPQL

영속성 컨텍스트

JPA를 이해하는데 가장 중요한 용어

엔티티를 영구 저장하는 환경이라는 뜻

EntityManager.persist(entity);

실제 DB에 넣는것이 아니라 Entity를 영속성 컨텐스트에 저장하는 메서드

엔티티 매니저를 통해 영속성 컨테이너에 접근한다.

엔티티 생명 주기

  • 비영속

  • 영속

  • 준영속

  • 삭제

비영속성 상태 (new/transient)

엔티티는 생명 주기가 있으며, 최초 객체를 생성한 상태이며,

JPA와는 상관이 없기 때문에 비영속성 상태이다.

영속 상태 (managed)

entityManager.persistence를 입력하면 영속 상태로 변경되며

객체를 저장한 영속성 상태로 변경된다.

  • 조회 시 DB를 조회하는 것이 아닌 1차 캐시를 검색해

    값이 있다면 1차 캐시 결과를 반환하며, 없다면 DB를 조회해서 반환한다.

  • 영속 엔티티의 동일성을 애플리케이션 차원에서 보장한다.

1차 캐시로 반복 가능한 읽기 등급의 트랜잭션 격리 수준을

데이터 베이스가 아닌 애플리케이션 차원에서 제공하기 때문

  • 트랜젹션을 지원하는 쓰기 지연을 제공하며, 영속 상태로 만들어도 바로 DB에 쿼리가 날아가는 것은 아니고

Commit를 만나면 DB로 날아간다.

  • 변경 감지 기능을 제공한다.

1차 캐시에 들어온 값을 스냅샷을 떠 놨다가 커밋되는 시점에 엔티티와 스냅샷을 비교해 엔티티가 변경되면 업데이트 쿼리를 쓰기 지연 저장소에 저장했다가 DB에 반영하고 커밋한다.

플러시

  • 영속성 컨텍스트에 저장되었다가 데이터베이스에 반영한 상태
    다만 영속성 컨텍스트를 비우는 것은 아니다.
  • insert, delete, update 등등 영속성 컨텍스트와 DB를 동일하게 만들어 주는 상태
  • JPQL 쿼리는 실행 시 flush가 자동으로 실행된다.
  • 트랜잭션이라는 작업 단위가 중요하며, 커밋 직전에만 동기화 하면 된다.

준영속 상태 (detached)

  • 영속에서 준영속 상태로 분리 시킨 상태
profile
축구를좋아하는개발자

0개의 댓글

관련 채용 정보