자바 ORM 표준 JPA 프로그래밍 공부 기록
JPA를 이해하는데 가장 중요한 용어
Entity를 영구 저장하는 환경
=> Entity를 영속성 컨텍스트에 저장한다.
//객체를 생성한 상태(비영속)
Member m = new Member();
m.setId(100L);
m.setName("HelloJPA");
//객체를 저장한 상태(영속)
em.persist(m);
//회원 엔티티를 영속성 컨텍스트에서 분리, 준영속 상태
em.detach(m);
//객체를 삭제한 상태(삭제)
em.remove(m);
엔티티 조회 시 DB를 찾는게 아니라 먼저 1차 캐시에서 조회한다.
1차 캐시에 없다면 DB에서 조회한다. DB에서 조회 후 1차 캐시에 저장하고 반환한다.
Member findMember1 = em.find(Member.class, 100L);
Member findMember2 = em.find(Member.class, 100L);
System.out.println(findMember1.getName());
System.out.println(findMember2.getName());
첫 번째 findMember1은 쿼리문이 날아가는데, 두 번째는 1차 캐시에서 조회하기 때문에 select 쿼리문이 날아가지 않는다.
Member findMember1 = em.find(Member.class, 100L);
Member findMember2 = em.find(Member.class, 100L);
System.out.println(findMember2==findMember1);
true를 리턴한다.
Member findMember1 = em.find(Member.class, 100L);
Member findMember2 = em.find(Member.class, 100L);
System.out.println(findMember2==findMember1);
커밋하는 순간 DB에 Insert SQL를 보낸다.
persist까지 Insert SQL를 DB에 보내지 않는다.
영속성 컨텍스트의 변경 내용을 데이터베이스에 반영
플러시는 영속성 컨텍스트를 비우지 않는다. 영속성 컨텍스트의 변경 내용을 데이터베이스에 동기화한다.
트랜잭션이라는 작업 단위가 가장 중요하다. 즉 커밋 직전에만 동기화 하면 된다.
영속 상태의 엔티티가 영속성 컨텍스트에서 분리된 상태를 의미