프로젝트 정리/스프링과 JPA 기반 웹 애플리케이션 개발

23. Open EntityManager (또는 Session) In View 필터

JPA EntityManager(영속성 컨텍스트)를 요청을 처리하는 전체 프로세스에 바인딩 시켜주는 필터.

  • 뷰를 랜더링 할때까지 영속성 컨텍스트를 유지하기 때문에 필요한 데이터를 랜더링 하는 시점에 추가로 읽어올 수 있다.              (지연 로딩, Lazy Loading)
  • 엔티티 객체 변경은 반드시 트랜잭션 안에서 할 것
  • 영속성 컨텍스트 (Jpa EntityManager, Hibernate session)

 

현재 버그

  • 컨트롤러에서 데이터를 변경했다. 왜 DB에 반영되지 않았을까?

 

서비스에서 트랜잭션 관리하는 경우

읽어온 데이터는 view rendering 되기 전까지 persistence 상태 -> view rendering중에도 조회 가능 (Open Entity를 사용하는 주요 이유 중하나)

리파지토리 직접 사용 경우

기본적으로 ModelRepository는 Transcation이 적용 되어 있다.
JPARepository의 구현체인 SimpleJpaRepository 내부엔 Transcation이 적용되어 있다.

 

스터디올래의 선택

  • 데이터 변경은 서비스 계층으로 위임해서 트랜잭션안에서 처리한다.
  • 데이터 조회는 리파지토리 또는 서비스를 사용한다.

 

실습

 

23. Open EntityManager (또는 Session) In View 필터 · devjun63/whiteship-studyolle@8055682

컨트롤러에서 데이터를 변경했다. 왜 DB에 반영되지 않았을까? persistence 상태의 객체가 Transcation에 위치 하지 않았기 때문

github.com

 

22. 프로필 뷰 만들기 · devjun63/whiteship-studyolle@1ab35c3

Permalink This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository. Browse files 22. 프로필 뷰 만들기 Loading branch information Showing 3 changed files with 105 additions and 14 deletions. +13

github.com