Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 자료구조
- 애그리거트
- Java Reflextion API
- 오라클
- exiting abnormally
- REDIS
- forNmae()
- ACCESS_REFUSED
- vue.js
- rabbitmq 에러
- $emit()
- quert
- VUE
- 커스텀 로그인
- 네임드 뷰
- paraller
- 컴포넌트 주도
- 도커빌드
- 트리 회전
- 자바
- Express
- redux
- AWS
- 리덕스 공식문서
- 리액트
- EBS
- .getClass()
- 오라클 병렬처리
- 리덕스
- react
Archives
- Today
- Total
개발정리
JPA-영속 컨텍스트 본문
-Entity Manager의 persist 메서드를 호출하면
Entity Manager와 연결된 영속 컨텍스트에 엔티티 객체가 등록 된다.
-이후 영속 컨텍스트가 엔티티를 분석하여 SQL문을 DB에 전송
-영속 컨텍스트가 애플리케이션과 실제 DB를 연결해주는 버퍼 기능 제공
영속 컨테이너와 엔티티 상태
생성 | 엔티티가 컨테이너에 등록되지않은 상태 |
관리 | 엔티티가 컨테이너에 등록된 상태 |
분리 | 엔티티가 컨테이너에 등록되었다가 분리된 상태 |
삭제 | 엔티티가 컨테이너에서 삭제 처리된 상태 |
생성 상태
package com.woo.jpaTest.client;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;
import com.woo.jpaTest.entity.Member;
public class Test {
public static void main(String[] args) {
EntityManagerFactory emf=Persistence.createEntityManagerFactory("hello");
EntityManager em =emf.createEntityManager();
EntityTransaction tx=em.getTransaction();
tx.begin();
Member member=new Member();
member.setName("Tom");
tx.commit();
}
}
생성 상태는 엔티티가 생성만 되고 영속 컨테이너에는 들어가지 않은 상태입니다.
이 상태에서는 db에 INSERT구문이 실행되지 않습니다.
관리상태
-엔티티가 영속 컨테이너의 관리를 받고 있는 상태입니다.
-persist 와 find 사용
EntityManagerFactory emf=Persistence.createEntityManagerFactory("hello");
EntityManager em =emf.createEntityManager();
EntityTransaction tx=em.getTransaction();
tx.begin();
Member member=new Member();
member.setName("Tom");
em.persist(member);
tx.commit();
-persist메서드를 통해 INSERT구문이 성공적으로 실행 되었습니다.
-이 코드에서 INSERT가 실행되는 시점은 어디 일까요 바로 트랜잭션이 종료되는 시점입니다.
EntityManagerFactory emf=Persistence.createEntityManagerFactory("hello");
EntityManager em =emf.createEntityManager();
EntityTransaction tx=em.getTransaction();
tx.begin();
Member member=new Member();
member.setName("Tom");
em.persist(member);
member.setName("sally");
tx.commit();
이번에는 persist메서드를 이용해 영속 컨테이너에 등록후 엔티티의 속성을 변경 해봅시다.
그럼 다음과 같이 값이 변경 되는 것을 보실수 있습니다.
영속 컨테이너는 관리중인 엔티티의 값이 변경되는 것을 감지하여 UPDATE구문을 실행시킵니다.
이것을 "더티체킹" 이라고 합니다.
분리상태
-분리 상태는 엔티티가 영속 컨테이너에 등록되었다가 해제된 상태
-detach 또는 clear 사용
삭제상태
-영속 컨테이너에서 엔티티가 제거된 상태
-이때 실제 데이터베이스에서도 데이터가 삭제된다.
-remove사용
참조:JPA퀵스타트 , 채규태
'스프링 > JPA' 카테고리의 다른 글
JPA-다대다 매핑 (0) | 2023.09.02 |
---|---|
JPA-일대일 매핑 (0) | 2023.09.01 |
JPA-다대일 연관관계 매핑 (0) | 2023.08.31 |
JPA-설정 (0) | 2023.08.29 |