diff --git a/README.md b/README.md index 00a8a0636..0f8266cd0 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,11 @@ # jpa-entity-manager +## 4단계 - EntityEntry + +### 요구 사항 + +- [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 +}