엔티티를 영구 저장하는 환경
EntityManager.persist(entity); // EntityManager를 통해 영속성 컨텍스트에 접근
// 객체를 생성한 상태(비영속)
Member member = new Member();
member.setId(101L);
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
// 객체를 저장한 상태(영속) -> 1차 캐시에 저장
em.persist(member);
// 1차 캐시에서 조회(없으면 DB에서 조회)
Member findMember = em.find(Member.class, 101L);
Member findMember1 = em.find(Member.class, 101L);
Member findMember2 = em.find(Member.class, 101L);
System.out.println("result = " + (findMember1 == findMember2));
SQL을 모아서 저장해뒀다 커밋 시점에 한번에 실행
Member member1 = new Member(150L, "A");
Member member2 = new Member(160L, "B");
em.persist(member1);
em.persist(member2);
tx.commit(); // 커밋하는 순간에 쿼리 실행
커밋 시점에 flush()가 실행되고 엔티티와 스냅샷(최초시점)을 비교해 변경사항이 감지되면 UPDATE 쿼리 실행
Member findMember = em.find(Member.class, 101L);
member.setName("ZZZ");
tx.commit();
Member member = new Member(200L, "member200");
em.persist(member);
em.flush(); // 쿼리 즉시 실행
tx.commit();
Member member = em.find(Member.class, 150L);
member.setName("AAAA");
em.detach(member); // 영속성 컨텍스트에서 분리
tx.commit(); // update 쿼리가 실행되지 않음!!