본문 바로가기

JPA

영속성 관리

영속성 컨텍스트

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(); // [트랜잭션] 커밋

결과>>

출처- www.inflearn.com/course/ORM-JPA-Basic

'JPA' 카테고리의 다른 글

[JPA] 지연 로딩과 즉시 로딩  (2) 2021.01.09
[JPA] 프록시란?  (0) 2020.12.23
상속관계 매핑  (0) 2020.12.22
연관관계 매핑  (0) 2020.12.22
엔티티 매핑  (1) 2020.12.21