영속성 컨텍스트
JPA를 이해하는데 가장 중요한 용어로 "엔티티를 영구 저장하는 환경"
EntityManager.persist(entity)
엔티티의 생명주기
비영속
- 영속성 컨텍스트와 전혀 관계가 없는 새로운 상태
//객체를 생성한 상태(비영속)
Member member = new Member();
member.setNo(1L);
member.setName("동물");
영속
- 영속성 컨텍스트에 관리되는 상태( persist를 한 상태)
EntityManager em = emf.createEntityManager();
try{
//객체를 생성한 상태(비영속)
Member member = new Member();
member.setNo(1L);
member.setName("동물");
// 객체를 저장한 상태(영속)
em.persist(member);
준영속, 삭제
- 영속성 컨텍스트에서 분리, 준영속 상태
em.detach(member);
- 객체를 삭제한 상태
em.remove(member);
데이터 조회시
- 1차 캐시에 데이터가 존재하면 1차 캐시에서 데이터를 가져온다.
- 그렇지 않을 경우 데이터베이스에서 조회한 후 1차 캐시에 저장하고 1차 캐시에 저장한다.
엔티티 수정(변경 감지)
// 영속 엔티티 조회
Member memberA = em.find(Member.class, "1L");
// 영속 엔티티 데이터 수정
memberA.setNo(100L);
memberA.setName("사자");
==> 자바 컬렉션과 쓰임이 비슷하다.( em.update(memberA)와 같은 코드 필요 X)
엔티티 등록
※ em.persist(member)를 한다고 DB에 저장되는 것이 아니다. [트랜잭션] 커밋이 꼭 필요
EntityManagerFactory emf= Persistence.createEntityManagerFactory();
EntityManager em = emf.createEntityManager();
EntityTransaction tx = em.getTransaction();
tx.begin(); // [트랜잭션] 시작
try{
//객체를 생성한 상태(비영속)
Member member = new Member();
member.setNo(1L);
member.setName("동물");
// 객체를 저장한 상태(영속)
em.persist(member);
// 커밋하는 순간 DB에 INSERT SQL를 보낸다.
tx.commit(); // [트랜잭션] 커밋
결과>>
'JPA' 카테고리의 다른 글
[JPA] 지연 로딩과 즉시 로딩 (2) | 2021.01.09 |
---|---|
[JPA] 프록시란? (0) | 2020.12.23 |
상속관계 매핑 (0) | 2020.12.22 |
연관관계 매핑 (0) | 2020.12.22 |
엔티티 매핑 (1) | 2020.12.21 |