[SPRING] JPA - 생명주기

RuiN·2022년 7월 31일
0
post-thumbnail

저번에 다룬다고 말했던 Entity의 생명주기를 다룰 예정입니다.
영속성 컨텍스트


Entity LifeCycle

1. 비영속 ( New / Transient )

  • 엔티티 객체를 생성
  • 순수한 객체 상태, 아직 저장하지 않음
  • 영속성 컨텍스트나 DB와 상관이 없다.
User user = new User();
user.setEmail("user1@google.com");
user.setUsername("user1");

2. 영속 ( Managed )

  • 영속성 컨텍스트에 저장이 된 상태
  • Entity가 영속성 컨텍스트에 의해 관리되는 상태
  • 영속상태라 하더라도 바로 DB에 적용되지 않음
User user = new User();
user.setEmail("user1@google.com");
user.setUsername("user1");

entityManager.persist(user);

3. 준영속 ( Detached )

  • 영속성 컨텍스트에 저장되었다가 분리된 상태
  • 영속성 컨텍스트에서 지운 상태
entityManager.detach(user);

4. 삭제 ( Removed )

  • 실제 DB 삭제를 요청한 상태
entityManager.remove(user);

+@

참고로 JpaRepository를 상속한 인터페이스에서도
EntityManager의 활동을 이어 받는다.


JPA Transactional

Jpa 에서도 Transactional 선언이 가능하다.

말그대로 Lombok 어노테이션을 달아준다면 전체로직이 성공이 될때까지 DB에 적용하지 않는다.

RuntimeException 에서는 롤백이 되지만,

Exception 의 경우, 개발자가 모든 예외 권한을 가지게되며 롤백은 진행되지 않는다.

profile
어디까지 올라갈지 궁금한 하루

0개의 댓글