그럼 계속 언급되는 EntityManager는 무엇일까?
@Autowired
private EntityManager entityManager;
모르는 사실중에, Entity도 생명주기가 있다는 이야기 였다. 정말 나는 모르고 작업을 많이 했다는 생각이 드는 부분이였다.
Entity의 생명주기는 각각 비영속, 준영속, 영속, 삭제로 나눌 수 있다. 일단은 하나하나 알아 보자.
//객체만 생성한 비영속상태
User user = new User();
@Autowired
private EntityManager entityManager;
// Class내에 Autowired로 EntityManager추가
//객체만 생성한 비영속상태
User user = new User();
// 객체를 저장한 영속상태
entityManager.persist(user);
// 영속 -> 준영속
// user엔티티를 영속성 컨텍스트에서 분리하면 준영속 상태가 된다.
entityManager.detach(user);
// 영속성 콘텍스트를 비우면 관리되고 있던 엔티티들은 준영속 상태가 된다. (대기 상태에 있는 변경 데이터들도 삭제)
entityManager.clear();
// 영속성 콘텍스트를 종료해도 관리되던 엔티티들은 준영속 상태가 된다.
entityManager.close();
// 준영속 -> 영속
// detach를 하여 준영속상태에 빠진 entity를 merge를 하면 다시 영속 상태가 된다.
entityManager.merge(user);
그럼 준영속 상태의 특징은 무엇일까?
- 1차 캐시, 쓰기 지연, 변경 감지, 지연 로딩을 포함한 영속성 컨텍스트가 제공하는 어떠한 기능도 동작하지 않는다.
// user엔티티를 영속성 컨텍스트와 DB에서 삭제
entityManager.remove(user);