김영한님의 자바 ORM 표준 JPA 프로그래밍 - 기본편 정리
EntityManager는 내부적으로 영속성 컨텍스트(Persistence Context)를 유지한다. 쉽게 말해, JPA가 엔티티를 관리하는 메모리 공간이다.
Member member = new Member();
member.setId("member1");
member.setUsername("회원1");
em.persist(member); // 비로소 영속 상태 진입
이제 member1은 1차 캐시에 저장된다.
Member find1 = em.find(Member.class, "member1"); // SELECT 발생
Member find2 = em.find(Member.class, "member1"); // 캐시에서 조회, SELECT 없음
System.out.println(find1 == find2); // true
== 비교도 trueem.persist() 호출 시, 바로 DB에 INSERT 되지 않는다.
em.getTransaction().begin();
em.persist(memberA);
em.persist(memberB);
// 아직 INSERT 없음
em.getTransaction().commit(); // 이 순간 INSERT SQL 실행
hibernate.jdbc.batch_size 옵션으로 JDBC 배치 처리도 지원Member member = em.find(Member.class, "member1");
member.setUsername("변경됨");
em.getTransaction().commit(); // UPDATE SQL 자동 발생
em.update() 같은 명시적 호출 필요 없음Member member = em.find(Member.class, "member1");
em.remove(member);
em.getTransaction().commit(); // DELETE SQL 발생
em.flush() 호출 가능em.flush(); // 강제로 DB에 반영
update() 호출 줄일 수 있음