From 21e00292432818a2a75c947a3c983ffb46ca2957 Mon Sep 17 00:00:00 2001 From: sang5c Date: Thu, 21 Nov 2024 21:42:37 +0900 Subject: [PATCH 1/2] =?UTF-8?q?docs:=204=EB=8B=A8=EA=B3=84=20=EC=9A=94?= =?UTF-8?q?=EA=B5=AC=EC=82=AC=ED=95=AD=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index 00a8a0636..4b1fff1b6 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,11 @@ # jpa-entity-manager +## 4단계 - EntityEntry + +### 요구 사항 + +- [ ] 엔티티의 관리 상태를 추가한다 + ## 3단계 - Persistence Context, Dirty Check ### 요구 사항 From 89241ae44706fc07631b669e1706f51ab149c4b3 Mon Sep 17 00:00:00 2001 From: sang5c Date: Thu, 21 Nov 2024 21:43:45 +0900 Subject: [PATCH 2/2] =?UTF-8?q?feat:=20Entity=EC=9D=98=20=EC=83=81?= =?UTF-8?q?=ED=83=9C=EB=A5=BC=20=EA=B4=80=EB=A6=AC=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- .../java/persistence/entity/EntityEntry.java | 17 +++++++++++++++++ .../persistence/entity/EntityManagerImpl.java | 1 - .../entity/PersistenceContextImpl.java | 13 ++++++++----- src/main/java/persistence/entity/Status.java | 10 ++++++++++ 5 files changed, 36 insertions(+), 7 deletions(-) create mode 100644 src/main/java/persistence/entity/EntityEntry.java create mode 100644 src/main/java/persistence/entity/Status.java diff --git a/README.md b/README.md index 4b1fff1b6..0f8266cd0 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ ### 요구 사항 -- [ ] 엔티티의 관리 상태를 추가한다 +- [X] 엔티티 관리 상태를 추가한다 ## 3단계 - Persistence Context, Dirty Check diff --git a/src/main/java/persistence/entity/EntityEntry.java b/src/main/java/persistence/entity/EntityEntry.java new file mode 100644 index 000000000..16b6a546b --- /dev/null +++ b/src/main/java/persistence/entity/EntityEntry.java @@ -0,0 +1,17 @@ +package persistence.entity; + +public class EntityEntry { + private Status status; + + private EntityEntry(Status status) { + this.status = status; + } + + public static EntityEntry createManaged() { + return new EntityEntry(Status.MANAGED); + } + + public void setDeleted() { + this.status = Status.DELETED; + } +} diff --git a/src/main/java/persistence/entity/EntityManagerImpl.java b/src/main/java/persistence/entity/EntityManagerImpl.java index e68564960..2e371fd08 100644 --- a/src/main/java/persistence/entity/EntityManagerImpl.java +++ b/src/main/java/persistence/entity/EntityManagerImpl.java @@ -3,7 +3,6 @@ import jdbc.JdbcTemplate; import java.util.HashMap; -import java.util.List; import java.util.Map; public class EntityManagerImpl implements EntityManager { diff --git a/src/main/java/persistence/entity/PersistenceContextImpl.java b/src/main/java/persistence/entity/PersistenceContextImpl.java index 65f7083ae..1726fc407 100644 --- a/src/main/java/persistence/entity/PersistenceContextImpl.java +++ b/src/main/java/persistence/entity/PersistenceContextImpl.java @@ -5,29 +5,32 @@ public class PersistenceContextImpl implements PersistenceContext { - private final Map entityMap = new HashMap<>(); + private final Map managedEntities = new HashMap<>(); private final Map entitySnapshots = new HashMap<>(); + private final Map entityEntries = new HashMap<>(); @Override public void put(EntityKey entityKey, Object entity) { - entityMap.put(entityKey, entity); + managedEntities.put(entityKey, entity); entitySnapshots.put(entityKey, EntitySnapshot.from(entity)); + entityEntries.put(entityKey, EntityEntry.createManaged()); } @Override public boolean contains(EntityKey entityKey) { - return entityMap.containsKey(entityKey); + return managedEntities.containsKey(entityKey); } @Override public Object get(EntityKey entityKey) { - return entityMap.get(entityKey); + return managedEntities.get(entityKey); } @Override public void remove(EntityKey entityKey) { - entityMap.remove(entityKey); + managedEntities.remove(entityKey); entitySnapshots.remove(entityKey); + entityEntries.get(entityKey).setDeleted(); } @Override diff --git a/src/main/java/persistence/entity/Status.java b/src/main/java/persistence/entity/Status.java new file mode 100644 index 000000000..fc17474df --- /dev/null +++ b/src/main/java/persistence/entity/Status.java @@ -0,0 +1,10 @@ +package persistence.entity; + +public enum Status { + MANAGED, + READ_ONLY, + DELETED, + GONE, + LOADING, + SAVING +}