1. Entity의 상태

비영속(Transient)

쉽게 말하자면 new 연산자를 통해 인스턴스화 된 Entity 객체를 의미합니다.
아직 영속성 컨텍스트에 저장되지 않았기 때문에 JPA의 관리를 받지 않습니다.
영속화(Managed)

.persist(entity) : 비영속 Entity를 EntityManager를 통해 영속성 컨텍스트에 저장하여 관리되고 있는 상태로 만듭니다
준영속(Detached) (not managed)
.detach( entity )
영속성 컨텍스트에 저장되어 관리되다가 분리된 상태를 의미합니다
분리 된 상태여서 객체의 값을 바꾸어도 업데이트 되지 않음 (Dirty Checking 없음)
영속 상태에서 준영속 상태로 바꾸는 방법 :
.detach(entity) : 특정 Entity만 준영속 상태로 전환.
.clear() : 컨텍스트를 초기화.
.close() : 컨텍스트를 종료.
준영속 상태에서 다시 영속 상태로 바꾸는 방법:
merge( entity ) : 전달받은 Entity를 사용하여 새로운 영속 상태의 Entity를 반환합니다.
- Entity의 식별자 값으로 영속성 컨텍스트를 조회합니다.
- 해당 Entity가 영속성 컨텍스트에 없다면?
- DB에서 새롭게 조회합니다.
- 조회한 Entity를 영속성 컨텍스트에 저장합니다.
- 전달 받은 Entity의 값을 사용하여 병합합니다.
- Update SQL이 수행됩니다. (수정)
- 만약 DB에서도 없다면 ?
- 새롭게 생성한 Entity를 영속성 컨텍스트에 저장합니다.
- Insert SQL이 수행됩니다. (저장)
- 해당 Entity가 영속성 컨텍스트에 없다면?
따라서 merge(entity) 메서드는 비영속,
준영속 모두 파라미터로 받을 수 있으며 상황에 따라 ‘저장’을 할 수도 ‘수정’을 할 수도 있습니다.
//
삭제(Removed)
.remove(entitiy); 삭제하기 위해 조회해온 영속 상태의 Entity를 파라미터로 전달받아 삭제 상태로 전환합니다.
( commit 후 Delete SQL이 DB에 요청되었습니다. )
'Spring' 카테고리의 다른 글
| Spring 기초 9 (Spring DATA JPA + 기능들) (0) | 2024.01.21 |
|---|---|
| Spring 기초 8 (SpringBoot 의 JPA) (0) | 2024.01.21 |
| Spring 기초 6 (영속성) (EntityManager) ( Persistence 기능) (변경 감지(Dirty Checking)) (0) | 2024.01.20 |
| Spring 기초 5 (Entity) (0) | 2024.01.20 |
| Spring 기초 4 (MVC) (JPA) (BEAN) (@Componet @Autowired) (Hibernate) (0) | 2024.01.20 |