JPA Entity LifeCycle

2020-09-08

JPA를 이용해서 플젝을 진행하면서 구글링을 열심히 하면서 개발하다보니 뭔가 기초가 다져지지 않은 모래성 위에 집을 짓는 기분이랄까? 그런 생각이 들어서 JPA 서적을 하나 구입해서 기초부터 탄탄히 공부해보기로 했다.

책은 자바 ORM 표준 JPA 프로그래밍 보면서 스터디를 진행했다.

엔티티 생명주기

엔티티는 4가지 상태가 존재한다.

비영속

엔티티 객체를 생성한 상태로 순수한 객체 상태이며 아직 저장하지 않았다. 따라서 영속성 컨텍스트나 데이터 베이스와 전혀 관련이 없는 상태

1
2
3
Member member = new Member();
member.setId("thinkub");
member.setUserName("Ming");

영속

엔티티 메니저를 통해 엔티티를 영속성 컨텍스트에 저장했다. 이렇게 영속성 컨텍스트가 관리하는 엔티티를 영속 상태라 한다.

1
em.persist(member);

준영속

영속성 컨텍스트가 관리하던 영속상태의 엔티티를 영속성 컨텍스트가 관리하지 않으면 준영속 상태가 된다. 특정 엔티티를 준영속 상태로 만들려면 em.detach()를 호출하면 된다. em.close()를 호출해서 영속성 컨텍스트를 닫거나 em.clear()를 호출해서 영속성 컨텍스트를 초기화해도 영속성 컨텍스트가 관리하던 영속상태의 엔티티는 준영속 상태가 된다.

1
em.detach(member);

삭제

엔티티를 영속성 컨텍스트와 데이터 베이스에서 삭제한다.

1
em.remove(member);