#JPA에서 가장 중요한 2가지
#Entity Manager Factory 와 Entity Manager
# 영속성 컨텍스트
# 엔티티의 생명주기
// 비영속
Member member = new Member();
member.setId(100L);
member.setUserName("member1");
//영속
entityManager.persist(member);
//회원 엔티티를 영속성 컨텍스트에서 분리, 준영속 상태
entityManager.detach(member);
//객체를 삭제한 상태(DB에서 삭제)
entityManager.remove(member);# 영속성 컨텍스트의 이점 1) 1차 캐시
2) 동일성 보장
Member a = entityManager.find(Member.class, "member1");
Member b = entityManager.find(Member.class, "member1");
System.out.println(a == b); // 동일성 비교 true3) 트랜잭션을 지원하는 쓰기 지연 (transactional write-behind)
EntityManager entityManager = entityManagerFactory.createEntityManager();
EntityTransaction transaction = entityManager.getTransaction();
//엔티티 매니저는 데이터 변경 시 트랜잭션을 시작해야 한다.
transaction.begin();
entityManager.persist(memberA);
entityManager.persist(memberB);
//여기까지 INSERT SQL을 데이터베이스에 보내지 않는다.
//커밋하는 순간 데이터베이스에 INSERT SQL을 보낸다.
transaction.commit();4) 변경 감지 (Dirty Checking)
EntityManager entityManager = entityManagerFactory.createEntityManager();
EntityTransaction transaction = entityManager.getTransaction();
//영속 엔티티 조회
Member memberA = entityManager.find(Member.class, "memberA");
//영속 엔티티 데이터 수정
memberA.setUsername("hi");
memberA.setAge(10);
//커밋하는 순간 데이터베이스에 UPDATE SQL을 보낸다.
transaction.commit();5) 지연 로딩 (Lazy Loading)
# 플러시