(해당 게시물은 JAVA ORM 표준 JPA 프로그래밍 을 듣고 정리한 글 입니다.)
비영속(new / transient)
영속성 컨텍스트와 전혀 관계가 없는 새로운 상태
Member member = new Member();
member.setId("1L");
member.setName("JWbase");
객체를 생성한 상태여서 영속성 컨텍스트에서 관리 되지 않는 비영속 상태라고 부른다.
영속 (managed)
영속성 컨텍스트에 관리되는 상태
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
// 객체를 저장한 상태 (영속)
em.persist(member);
tracnsaction.commit()를 해야지만 DB에 query가 동작한다.
준영속 (detached)
// 회원 엔티티를 영속성 컨텍스트에서 분리, 준 영속 상태
em.detach(member);
삭제 (removed)
em.remove(member);
Member member = new Member();
member.setId("1L");
member.setName("JWbase");
//1차 캐시에 저장됨
em.persist(member);
//1차 캐시에서 조회
Member findMember = em.find(Member.class, "1L");
Member findMember1 = em.find(Member.class, 120L);
Member findMember2 = em.find(Member.class, 120L);
System.out.println("result = " + (findMember1 == findMember2)); //true
EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");
EntityManager em = emf.createEntityManager();
EntityTransaction transaction = em.getTransaction();
transaction.begin();
em.persist(memberA);
em.persist(memberB);
//이 코드까지 실행되더라도 INSERT문을 날리지 않는다.
//commit를 하는 순간에 INSERT문을 날린다.
transacion.commit();
Member member = em.find(Member.class, 160L);
member.setName("JWClassic"); //em.persist(member)를 하지 않아도 update가 된다.
Member memberA = em.find(Member.class, "memberA");
em.remove(memberA); //엔티티 삭제