본문 바로가기

JPA/영속성 관리

(5)
#05 플러시 란? 플러시( flush() ) 란? 영속성 컨텍스트의 변경 내용을 SQL로 만들고 데이터베이스에 반영한다. 플러시 수행동작 영속성 컨텍스트에 있는 모든 엔티티를 스냅샷과 비교해서 수정된 엔티티를 찾는다. 변경이 확인된 엔티티는 수정 SQL을 만들고 쓰기지연 SQL저장소에 등록한다. 쓰기 지연 SQL 저장소의 쿼리를 DB에 전송한다. (C/R/U/D SQL 모두포함) 플러시 호출방법 3가지 em.flush() -> 직접호출 ( 테스트나 다른 프레임워크와 JPA를 함께 사용할 때를 제외하고 거의 사용안함 ) 트랜잭션 커밋 -> 자동호출 ( 커밋할 때 알아서 SQL문을 만들어서 보내야 되기 때문에 JPA는 자동으로 호출한다. ) JPQL 쿼리 실행 -> 자동호출 ( JPQL외에 영속성컨 텍스트에 기존에 반영되지 ..
#04 영속성 컨테스트의 특정 - 엔티티 등록 / 수정 / 삭제 Index 엔티티 등록 엔티티 수정 엔티티 삭제 엔티티 등록 EntityManager em = emf.createEntityManager(); //엔티티 매니저 생성 EntityTransaction transaction = em.getTransaction(); //트랜잭션 기능 획득 // 엔티티 매니저는 데이터 변경 시 트랜잭션을 시작해야 한다. transaction.begin(); // [트랜잭션] 시작 em.persist(memberA); em.persist(memberB); // 여기까지는 INSERT SQL을 데이터베이스에 보내지 않는다. // 커밋하는 순간 데이터베이스에 INSERT SQL을 보낸다. transaction.commit(); // [트랜잭션] 커밋 EntityManager는 트랜잭..
#03 영속성 컨텍스트의 특징 - 엔티티 조회 Index 영속성 컨텍스트(persistence context) 의 특징 엔티티 조회 영속성 컨텍스트(persistence context) 의 특징 영속성 컨텍스트와 식별자 값 - 영속성 컨텍스트는 엔티티를 구분하는데 @Id 어노테이션을 붙여놓은 식별자 값으로 구분한다. 따라서 영속 상태는 식별자 값이 반드시 있어야 하고 없으면 예외가 발생한다. 테이터베이스 저장 - JPA는 보통 트랜잭션을 커밋하는 순간 영속성 컨텍스트에 새로 저장된 엔티티를 데이터베이스에 반영한다. 그리고 이부분을 flush 라고 한다. 영속성 컨텍스트의 장정 1차 캐시 동일성 보장 트랜잭션을 지원하는 쓰기 지연 변경 감지 지연 로딩 엔티티 조회 1차 캐시 영속성 컨텍스트(persistence context)는 내부에 캐시를 가지고 ..
#02 영속성 컨텍스트 / 엔티티의 생명주기 Index 영속성 컨텍스트란? 엔티티의 생명주기 영속성 컨텍스트란? 영속성 컨텍스트(Persistence context) 란 JPA를 이해하는데 가장 중요한 용어로서 이를 우리말로 해석하자면 '엔티티를 영구 저장하는 환경' 이라는 뜻으로 책에서는 이야기 한다. em.persist(member); ( 지난 포스팅을 보면 해당 코드를 알수 있다. 간다한게 em은 EntityManager 객체이다.) 우리는 회원Entity(member)를 저장 한다라고 생각할 수 있는데 정확하게는 엔티티 매니저를 사용해서 회원 엔티티를 영속성 컨텍스트에 저장한다. 영속성 컨텍스트는 논리적인 개념으로 엔티티 매니저를 생성할 때 하나 만들어진다. 그리고 EntityManager를 통해서 영속성 컨텍스트에 접근하고 관리할 수 있다..
#01 엔티티 매니저 팩토리와 엔티티 매니저 Index 사용방법과 주의사항 DB connection 획득 정리 JPA가 제공하는 기능은 크게 두가지가 있다. 1. 엔티티와 테이블을 매핑한다. 2. 설계 부분과 매핑한 엔티티를 실제 사용한다. EntityManager 는 Entity의 C/R/U/D 등 Entity와 관련된 모든일을 처리한다. 개발자 입장에서는 EntityManager를 가상의 데이터베이스 생각하면 된다. 그리고 책에 나오는 구현관련 예제는 Hiberante를 기준으로 이야기 해주고있다. 다른 JPA 구현체도 크게 다르지는 않다고하니까 크게 신경쓰지 않아도 될 것 같다. 사용방법과 주의사항 데이터 베이스를 하나면 사용하는 애플리케이션은 일반적으로 EntityManager Factory를 하나만 생성한다. 1. EntityManager..