Entity Lifecycle

Entity Lifecycle
| Operations | Description |
|---|
| Detach | If entity is detached, it is not associated with a Hibernate session |
| Merge | If instance is detached from session, then merge will reattach to session |
| Persist | Transitions new instances to managed state. Next flush / commit will save in db. |
| Remove | Transitions managed entity to be removed. Next flush / commit will delete from db. |
| Refresh | Reload / synch object with data from db. Prevents stale data |
1.Β λΉμμ (New/Transient)
- μ μ: μν°ν°κ° μμ±λμμ§λ§ μμ§ μμμ± μ»¨ν
μ€νΈμ μ°κ²°λμ§ μμ μνμ
λλ€.
- νΉμ§:
- JPAμ 무κ΄ν μμ μλ° κ°μ²΄μ
λλ€.
- λ³κ²½ κ°μ§(Dirty Checking), 1μ°¨ μΊμ λ± μμμ± μ»¨ν
μ€νΈμ κΈ°λ₯μ΄ μ μ©λμ§ μμ΅λλ€.
- μμ
java
Member member = new Member("user1"); // λΉμμ μν
2.Β μμ (Managed)
- μ μ: μν°ν°κ° μμμ± μ»¨ν
μ€νΈμ μ μ₯λμ΄ κ΄λ¦¬λλ μνμ
λλ€.
- νΉμ§:
em.persist(),Β em.find(), JPQL 쿼리 κ²°κ³Όλ‘ μμ μνκ° λ©λλ€.
- λ³κ²½ κ°μ§κ° νμ±νλμ΄, νΈλμμ
μ»€λ° μ μλμΌλ‘ DBμ λ°μλ©λλ€
- 1μ°¨ μΊμμ μ μ₯λλ©°, λμΌν μλ³μλ‘ μ‘°ν μ μΊμμμ λ°νλ©λλ€
- μμ:
java
em.persist(member); // μμ μνλ‘ μ ν
3.Β μ€μμ (Detached)
- μ μ: μμ μνμ μν°ν°κ° μμμ± μ»¨ν
μ€νΈμμ λΆλ¦¬λ μνμ
λλ€.
- νΉμ§:
em.detach(),Β em.clear(),Β em.close()λ‘ μ νλ©λλ€
- λ³κ²½ κ°μ§μ 1μ°¨ μΊμ κΈ°λ₯μ΄ λΉνμ±νλ©λλ€.
- μλ³μ(ID)λ μ μ§λλ©°,Β
merge()λ₯Ό ν΅ν΄ λ€μ μμ μνλ‘ λ³΅κ·ν μ μμ΅λλ€
- μμ:
java
em.detach(member); // μ€μμ μνλ‘ μ ν
μν μ μ΄ λΉκ΅
| μν | μμμ± μ»¨ν
μ€νΈ κ΄λ¦¬ | λ³κ²½ κ°μ§ | 1μ°¨ μΊμ | DB λκΈ°ν |
|---|
| λΉμμ | β | β | β | β |
| μμ | β
| β
| β
| νΈλμμ
μ»€λ° μ |
| μ€μμ | β | β | β | β |
4.Β μμ (Removed)
- μ μ: μν°ν°κ° μμμ± μ»¨ν
μ€νΈμ λ°μ΄ν°λ² μ΄μ€μμ μμ λ μνμ
λλ€.
- μμ:
em.remove(member); // μμ μν
μμμ± μ»¨ν
μ€νΈμ ν΅μ¬ κΈ°λ₯
- 1μ°¨ μΊμ: μμ μνμ μν°ν°λ₯Ό μΊμνμ¬ μ‘°ν μ±λ₯ ν₯μ
- λ³κ²½ κ°μ§ (Dirty Checking): μν°ν°μ λ³κ²½ μ¬νμ μλμΌλ‘ DBμ λ°μ
- μ°κΈ° μ§μ° (Transactional Write-Behind): INSERT/UPDATE 쿼리λ₯Ό νΈλμμ
μ»€λ° μ ν λ²μ μ€ν
- λμΌμ± 보μ₯: κ°μ μλ³μμ μν°ν°λ νμ λμΌν μΈμ€ν΄μ€ λ°ν
μν μ μ΄ μμ μ½λ
// λΉμμ β μμ
Member member = new Member("user1");
em.persist(member);
// μμ β μ€μμ
em.detach(member);
// μ€μμ β μμ (λ³ν©)
Member mergedMember = em.merge(member);
// μμ β μμ
em.remove(mergedMember);
κ²°λ‘
- μμμ± μ»¨ν
μ€νΈλ μν°ν°μ μνλ₯Ό κ΄λ¦¬νλ©°, ν¨μ¨μ μΈ DB μ°μ°μ μ§μν©λλ€.
- λΉμμμ JPAμ 무κ΄ν μν,Β μμμ κ΄λ¦¬ λμ,Β μ€μμμ λΆλ¦¬λ μνλ‘ μ΄ν΄ν΄μΌ ν©λλ€.
- μν μ μ΄λ₯Ό ν΅ν΄ μν°ν°μ μλͺ
μ£ΌκΈ°λ₯Ό μ μ΄ν μ μμ΅λλ€.