em.detach(entity) // 특정 엔터티만 준영속 상태로 전환한다.
em.clear() // 영속성 컨텍스트를 완전히 초기화한다.
em.close() // 영속성 컨텍스트를 종료한다.
em.detach() - 특정 엔터티를 준영속 상태로 만듬.
em.clear() : 영속성 컨텍스트를 초기화해서 해당 영속성 컨텍스트의 모든 엔터티를 준영속 상태로 만든다.
em.close() : 영속성 컨텍스트가 관리하던 영속 상태의 엔터티가 모두 준영속 상태가 된다. (종료)
준영속 상태의 특징
1. 거의 비영속 상태에 가깝다.
- 영속성 컨텍스트가 관리하지 않으므로 1차 캐시, 쓰기 지연, 변경 감지, 지연 로딩을 포함한 영속성 컨텍스트가 제공하는 어떠한 기능도 동작하지 않는다.
2. 식별자 값을 가지고 있다.
- 비영속 상태는 식별자 값이 없을 수도 있지만 준영속 상태는 이미 한 번 영속 상태였으므로 반드시 식별자 값을 가지고 있다.
3. 지연 로딩을 할 수 없다.
- 지연 로딩은 실제 객체 대신 프록시 객체를 로딩해두고 해당 객체를 실제 사용할 때 영속성 컨텍스트를 통해 데이터를 불러오는 방법이다. 하지만 준영속 상태는 영속성 컨텍스트가 더는 관리하지 않으므로 지연 로딩 시 문제가 발생한다.
merge() 메소드 : 준영속 상태의 엔터티를 받아서 그 정보로 새로운 영속상태의 엔터티를 반환하는 것.