관계를 도식으로 표현
JPA (Java Persistence API)
└─ EntityManagerFactory
└─ EntityManager
└─ Persistence Context (영속성 컨텍스트)
JPA (Java Persistence API)
EntityManagerFactory
EntityManager
를 생성하는 팩토리 객체.EntityManagerFactory
는 EntityManager
를 생성하는 팩토리.EntityManager
는 영속성 컨텍스트를 생성 및 관리.Item item = new Item(); // 객체생성 비영속 상태, JPA영속성 컨텍스트와 연결되지 않음.
item.setItemNm("테스트 상품"); //Item 객체의 속성(itemNm)에 값을 설정, 여전히 비영속 상태
/*
EntityManagerFactory를 사용하여 EntityManager 객체를 생성
EntityManagerFactory는 데이터베이스와의 연결을 설정하고 EntityManager를 생성하는 팩토리
EntityManager는 영속성 컨텍스트(Persistence Context)를 관리하는 역할
새롭게 생성된 EntityManager는 데이터베이스와의 작업을 관리
*/
EntityManager em = entityManagerFactory.createEntityManager();
/*
EntityTransaction 객체를 가져옴.
EntityTransaction은 데이터베이스 작업(삽입, 수정, 삭제)을 묶어서 처리하는 트랜잭션을
시작하거나 커밋/롤백하는 역할
*/
EntityTransaction transation = em.getTransaction();
// 트랜잭션 시작, DB작업 실행 하기전에 준비
transation.begin();
//Item 객체를 영속성 컨텍스트에 등록
em.persiste(item);
transation.commit(); // 트랜잭션을 DB에 반영
em.close(); // 엔티티매니저close()메서드를 호출해 사용한 자원을 반환
emf.close(); // 엔티티매니저팩토리의 close()메서드를 호출해 사용한 자원을 반환
Item item = new Item(); // 비영속 상태
item.setItemNm("테스트 상품");
em.persist(item); // 영속 상태로 변경
준영속 상태 (Detached)
영속성 컨텍스트에서 관리가 더 이상 이루어지지 않는 상태
EntityManager.detach(),
EntityManager.close(),
EntityManager.clear() 호출되면 준영속 상태로 변경
삭제 상태 (Removed)
영속성 컨텍스트에 의해 관리되지만, 삭제가 예약된 상태
트랜잭션이 커밋되면 데이터베이스에서 삭제
em.remove(item); // 삭제 상태로 변경
상태 | 메서드 호출 | 상태 결과 |
---|---|---|
비영속 (Transient) | EntityManager.persist() | 영속 (Persistent) |
영속 (Persistent) | EntityManager.detach() | 준영속 (Detached) |
영속 (Persistent) | EntityManager.remove() | 삭제 (Removed) |
준영속 (Detached) | EntityManager.merge() | 영속 (Persistent) |