영속성 컨텍스트란
Member member = new Member();
member.setId("member1");
member.setUsername("회원");
Member member = new Member();
member.setId("member1");
member.setUsername("회원");
EntityManager em = emf.createEntityManager();
em.getTranjaction().begin();
em.persist(member);
em.detach(member);
em.remove(member);
Member member = new Member();
member.setId("member1");
member.setUsername("회원");
EntityManager em = emf.createEntityManager();
em.getTranjaction().begin();
// 1차 캐시에 저장됨
em.persist(member);
// 1차 캐시에서 조회
Member findMember = em.find(Member.class, "member1");
// 1차 캐시에 없기 때문에 DB에서 조회 (큰 효과는 없음)
Member findMember2 = em.find(Member.class, "member2");
Member findMember1 = em.find(Member.class, 101L);
Member findMember2 = em.find(Member.class, 101L);
System.out.println(findMember1 == findMember2); // 동일성 비교 true
EntityManager em = emf.createEntityManager();
EntityTransaction transaction = em.getTranjaction();
// 엔티티 매니저는 데이터 변경 시 트랜잭션을 시작해야 한다.
transaction.begin(); [트랜잭션] 시작
em.persist(memberA);
em.persist(memberB);
// 여기까지 INSERT SQL을 DB에 보내지 않는다.
// 커밋하는 순간 DB에 INSERT SQL을 보낸다.
transaction.commit(); // [트랜잭션] 커밋
EntityManager em = emf.createEntityManager();
EntityTransaction t = em.getTranjaction();
transaction.begin(); [트랜잭션] 시작
// 영속 엔티티 조회
Member m = em.find(Member.class, "a");
// 영속 엔티티 데이터 수정
m.setName("gg");
transaction.commit(); // [트랜잭션] 커밋
EntityManager em = emf.createEntityManager();
EntityTransaction transaction = em.getTranjaction();
transaction.begin(); [트랜잭션] 시작
// 영속 엔티티 조회
Member m = em.find(Member.class, "a");
// 영속 엔티티 데이터 삭제
em.remove(m);
transaction.commit(); // [트랜잭션] 커밋
em.setFlushMode(FlushModeType.COMMIT)
// 영속 엔티티 조회
Member m = em.find(Member.class, "a");
m.setName("AAA");
em.detach(m);
tx.commit(); // 아무 일도 일어나지 않음