Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions src/main/java/com/yourssu/jpa/EntityManager.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.yourssu.jpa;

public class EntityManager<T, ID> {
private final PersistenceContext<T, ID> persistenceContext = new PersistenceContext<>();

public T persist(ID id, T entity) {
persistenceContext.save(id, entity);
return entity;
}

public void merge() {
persistenceContext.merge();
}
}
34 changes: 34 additions & 0 deletions src/main/java/com/yourssu/jpa/PersistenceContext.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package com.yourssu.jpa;

import java.util.HashMap;
import java.util.Map;

public class PersistenceContext<T, ID> {
private final Map<ID, T> entityMap = new HashMap<>();
private final Map<ID, T> snapshotMap = new HashMap<>();


public void merge() {
for (ID id : entityMap.keySet()) {
T instance = entityMap.get(id);
T original = snapshotMap.get(id);

if (original == null) {
System.out.println("DB에 저장되었습니다. " + instance);
RealDB.push(id, instance);
continue;
}

if (original.equals(instance)) {
continue;
}
System.out.println("DB에 저장되었습니다. " + instance);
RealDB.push(id, instance);
}
}

public void save(ID id, T instance) {
System.out.println("영속성 컨텍스트에 저장되었습니다. " + instance);
entityMap.put(id, instance);
}
}
13 changes: 13 additions & 0 deletions src/main/java/com/yourssu/jpa/RealDB.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.yourssu.jpa;

import java.util.HashMap;
import java.util.Map;

public class RealDB {

private static final Map<Object, Object> db = new HashMap<>();

public static void push(Object key, Object instance) {
db.put(key, instance);
}
}
13 changes: 13 additions & 0 deletions src/main/java/com/yourssu/jpa/Repository.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.yourssu.jpa;

public class Repository {
private final EntityManager<UserEntity, Long> entityManager;

public Repository(EntityManager<UserEntity, Long> entityManager) {
this.entityManager = entityManager;
}

public UserEntity save(UserEntity entity) {
return entityManager.persist(entity.getId(), entity);
}
}
31 changes: 31 additions & 0 deletions src/main/java/com/yourssu/jpa/UserEntity.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package com.yourssu.jpa;

import java.util.Objects;

public class UserEntity {
private final Long id;
private String name;
private String email;

public UserEntity(Long id, String name, String email) {
this.id = id;
this.name = name;
this.email = email;
}

public Long getId() {
return id;
}

@Override
public boolean equals(Object o) {
if (o == null || getClass() != o.getClass()) return false;
UserEntity that = (UserEntity) o;
return Objects.equals(id, that.id) && Objects.equals(name, that.name) && Objects.equals(email, that.email);
}

@Override
public int hashCode() {
return Objects.hash(id, name, email);
}
}
21 changes: 21 additions & 0 deletions src/test/java/com/yourssu/EntityManagerTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.yourssu;


import com.yourssu.jpa.EntityManager;
import com.yourssu.jpa.Repository;
import com.yourssu.jpa.UserEntity;
import org.junit.jupiter.api.Test;

class EntityManagerTest {
@Test
void persist() {
EntityManager<UserEntity, Long> entityManager = new EntityManager<>();
Repository repository = new Repository(entityManager);
// repository save 하고
// merge하고

UserEntity userEntity = new UserEntity(1L, "test", "[email protected]");
repository.save(userEntity);
entityManager.merge();
}
}