Entity LifeCycle

shin·2023년 9월 17일
0

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);
profile
Backend development

0개의 댓글