Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
Tags
- Retrospection
- Internet
- spring security
- conditional
- Basic Authentication
- http client
- MicroService
- Spring MVC
- Spring cloud
- Spring boot
- spring cloud eureka
- Web Framework
- OpenFeign
- undertow
- backend
- OOP
- entity lifecycle
- java
- Spring Boot Starter
- autoconfiguration
- Authentication
- embedded server
- Developer Roadmap
- Spring Core
- Collection Framework
- gradle
- hibernate
- oauth2
- Spring Boot Actuator
- Spring Data
Archives
- Today
- Total
경계의 경계
Hibernate의 Entity Lifecycle 본문
들어가며
Hibernate를 사용하면 객체를 생성하여 DB에 데이터를 저장하거나, DB에 들어 있는 데이터를 조회할 수 있다.
이를 엔티티(영속성 객체)라 하는데, 이 엔티티는 DB에 연결되어 있는 라이프사이클동안 여러 단계를 거친다.
Hibernate에서 정의하는 엔티티의 상태는 다음과 같다.
- Transient State
- Persistent State
- Detached State
- Removed State
State 1 : Transient State
- Transient State는 엔티티 객체의 첫 번째 상태로, new 키워드를 통해 객체가 새로 생성된 POJO(Plain Old Java Object)이다.
- Transient State에서 엔티티 객체는 Hibernate 세션에 연결되어 있지 않다. 즉, DB에 연결되어 있지 않다.
- 엔티티 객체에 수정이 일어나도, DB 데이터는 변화하지 않는다.
- 힙 메모리(Heap Memory)에 존재하고 있다.
- 어플리케이션에서 객체가 생성되었으나 세션에 연결되지 않은 경우나
- 객체가 닫힌 세션에서 생성된 경우이다.
Employee e = new Employee();
e.setId(1);
e.setFirstName("Gigyesik");
State 2 : Persistent State
- 엔티티 객체가 Hibernate 세션에 연결되고 나면 그 객체는 Persistent State로 변화한다.
- Hibernate 세션을 사용하여 엔티티 객체를 저장하는 경우
- Hibernate 세션을 사용하여 엔티티 객체를 조회하는 경우
- 엔티티 객체 하나는 DB 테이블의 row 하나를 의미한다. 즉, 엔티티 객체에 수정이 일어나면 DB에도 수정이 일어난다.
- 사용 가능한 메서드는 아래와 같다.
- session.persist(e);
- session.save(e);
- session.saveOrUpdate(e);
- session.update(e);
- session.merge(e);
- session.lock(e);
// Transient State
Employee e = new Employee("Gigyesik");
//Persistent State
session.save(e);
State 3 : Detached State
- Persistent State 객체를 Detached State로 바꾸기 위해서는 세션을 닫거나 캐시를 비워야 한다.
- 세션이 닫히거나 캐시가 클리어되면 엔티티 객체에 수정이 일어나도 DB 데이터에는 영향을 주지 않는다.
- 언제든 아래 메서드를 사용하여 새로운 세션에 연결해 Persistent State로 돌아갈 수 있다.
- merge()
- update()
- load()
- refresh()
- save()
- update()
- Detached State에서 사용할 수 있는 메서드는 아래와 같다.
- session.detach(e);
- session.evict(e);
- session.clear();
- session.close();
// Transient State
Employee e = new Employee("Gigyesik");
// Persistent State
session.save(e);
// Detached State
session.close();
State 4 : Removed State
- Hibernate의 엔티티 Lifecycle 중 마지막 상태이다.
- 엔티티 객체가 DB에서 삭제되어 있는 경우이다.
- session.delete() 메서드를 통해 사용할 수 있다.
- DB에 데이터가 존재하지 않으므로 엔티티 객체가 수정되어도 DB에 반영되지 않는다.
Employee e = new Employee();
Session s = sessionfactory.openSession();
e.setId(1);
// Persistent State
session.save(e)
// Removed State
session.delete(e);
Resources
'Spring Data > Hibernate' 카테고리의 다른 글
Hibernate의 참조 관계 설정(Referential Relationship Mapping) (0) | 2024.05.08 |
---|---|
Hibernate와 Transaction 관리 (0) | 2024.05.03 |
Spring Boot와 Hibernate (0) | 2024.05.02 |