Spring, JPA 🌱/김영한 JPA

준영속 상태란?영속 상태의 엔티티가 영속성 컨텍스트에서 분리(detached)영속성 컨텍스트가 제공하는 기능(1차 캐시, dirty checking 등등..)을 사용 못함Q. 준영속 상태랑 비영속 상태 차이?비영속 상태 (Transient): 객체가 한 번도 영속성 컨텍스트에 의해 관리되지 않은 상태준영속 상태 (Detached): 객체가 한 번 영속성 컨텍스트에 의해 관리되었으나, 현재는 더 이상 관리되지 않는 상태준영속 상태로 만드는 방법em.detach(entity)특정 엔티티만 준영속 상태로 전환em.clear()영속성 컨텍스트를 완전히 초기화em.close영속성 컨텍스트를 종료em.detach(entity)특정 엔티티만 준영속 상태로 전환em.find를 하면 영속 상태이다. (DB에서 가져와 1..
플러시란?영속성 컨텍스트의 변경 내용을 데이터베이스에 반영하는 과정즉, 영속성 컨텍스트에 쌓인 변경된 엔티티들을 실제 DB에 반영영속성 컨텍스트 내에서 엔티티가 변경되거나 삭제된 상태는 DB에 바로 반영되지 않고, 쓰기 지연 저장소에 쌓이게 됩니다. 그리고 트랜잭션이 커밋되거나, flush() 메서드가 호출될 때 DB에 쿼리가 반영됩니다.transaction.commit()호출 시 flush()자동 호출transaction.commit()이 호출되면 flush() ,commit() 순서대로 호출플러시 발생 과정1. 변경 감지(Dirty Checking)영속성 컨텍스트는 트랜잭션 중에 엔티티 객체의 상태를 추적합니다. 엔티티가 변경된 상태인지를 감지하려면 JPA는 변경 감지(Dirty Checking)를 ..
영속성 컨텍스트의 이점1차 캐시동일성(identity) 보장쓰기 지연 (transactional write-behind)변경 감지 (Dirty Checking)1차 캐시영속성 컨텍스트는 내부에 1차 캐시를 가지고 있다.Member 객체를 생성한 후 em.persist를 통해 member 객체를 영속성 컨텍스트에 넣으면id와 함께 member객체 자체가 저장된다.em.find를 통해 조회를 하면 JPA는 영속 컨텍스트에서 먼저 1차 캐시를 뒤진다.1차 캐시에 있으면 바로 조회해 옴다음으로 find(”member2”)로 member2를 조회한다.member2가 1차 캐시에 없으면 DB를 조회한다. (member2는 DB에 있다고 가정)그리고 DB에서 조회한 member2를 1차 캐시에 저장그 다음 membe..
영속성 컨텍스트란?“엔티티를 영구 저장하는 환경”이라는 뜻EntityManager.persist(entity) : 엔티티를 영속성 컨텍스트에 저장EntityManager를 통해서 영속성 컨텍스트에 접근엔티티의 생명주기비영속 (new/transient)영속성 컨텍스트와 전혀 관계가 없는 새로운 상태영속 (managed)영속성 컨텍스트에 의해 관리되는 상태em.persist(Member);를 하면 이 상태가 됨준영속(detached)영속성 컨텍스트에 저장되었다가 분리된 상태삭제 (removed)삭제된 상태비영속 (new/transient)객체를 생성만 하고 EntityManager에 넣지 않은 상태영속 (managed)객체가 영속 컨텍스트에 의해 관리되고 있는 상태em.persist(member)를 하면 E..
JPA 구동 방식먼저 Persistence라는 클래스를 만듦여기서 META-INF/persistence.xml에 있는 설정 정보를 읽어서 EntitiyManagerFactory라는 클래스를 만듦그리고 EntityManagerFactory에서 필요할 때마다 EntityManager 생성META-INF/persistence.xmlCopy --> 여기서 설정 정보 조회JpaMainCopypackage hellojpa;import jakarta.persiste..