1. 엔티티 생명주기
New/transient(비영속)
- 영속성 컨텍스트와 관련없이, 객체를 생성만 한 상태
Member member = new Member();
member.setName("Shin");
Managed(영속)
- 영속성 컨텍스트에 저장되어 Entity가 영속성 컨텍스트에 의해 관리됨
private final EntityManger entityManager;
...
entityManager.persist(member);
entityManager.find(member.class, id)
persist()
- 영속성 컨텍스트에 저장되어 영속 상태가 됨
- 바로 DB에 쿼리가 날라가지 않음
- 트랜잭션이 커밋되는 시점에 영속성 컨텍스트에 있는 쿼리가 DB로 날아가서 DB에 저장됨
find()
- 영속성 컨텍스트 1차 캐시에 없어서 DB에서 조회한 후 해당 Entity를 1차 캐시에 올리면 이를 영속 상태라고 함
Detached(준영속)
- 영속성 컨텍스트에 저장되었다가 분리, 즉 지워진 상태
entityManager.detach(member);
entityManager.clear();
entityManager.close();
- 영속 상태의 엔티티가 영속성 컨텍스트에서 분리되어 영속성 컨텍스트가 제공하는 기능을 사용하지 못하게 됨
detach()
- 파라미터로 전달한 entity를 영속성 컨텍스트에서 분리하여 JPA가 관리하지 않는 객체로 만듦
- Transaction commit에서 아무 일도 발생하지 않기 때문에, entity가 변경이 되었지만 실제로 update Query가 날라가지는 않음
clear()
- entityManger 안에 있는 영속성 컨텍스트를 모두 완전히 초기화
- clear는 테스트 케이스 작성 시 1차 캐시와 상관없이 쿼리를 확인하고 싶을 때 도움이 됨
close()
- 영속성 컨텍스트를 종료 시켜서 JPA 관리 대상에서 제외시킴
Removed(삭제)
entityManager.remove(member);