Skip to content

Commit

Permalink
refactor: CustomJpaRepository 의 로직을 EntityManager 로 이동
Browse files Browse the repository at this point in the history
  • Loading branch information
ghojeong committed Jul 8, 2023
1 parent 292be97 commit 65986b1
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 27 deletions.
5 changes: 1 addition & 4 deletions src/main/java/persistence/entity/CustomJpaRepository.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,6 @@ public CustomJpaRepository(EntityManager entityManager) {
}

public T save(T t) {
if (entityManager.isDirty(t)) {
entityManager.merge(t);
}
return t;
return entityManager.persist(t);
}
}
6 changes: 1 addition & 5 deletions src/main/java/persistence/entity/EntityManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,9 @@
public interface EntityManager {
<T> Optional<T> find(Class<T> clazz, Object id);

void persist(Object entity);
<T> T persist(T entity);

void remove(Object entity);

void merge(Object entity);

void detach(Object entity);

boolean isDirty(Object entity);
}
31 changes: 13 additions & 18 deletions src/main/java/persistence/entity/EntityManagerImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -29,16 +29,17 @@ public <T> Optional<T> find(Class<T> clazz, Object id) {
}

@Override
public void persist(Object entity) {
public <T> T persist(T entity) {
if (!isDirty(entity)) {
return entity;
}
final String query = hasEntity(entity)
? dml.getUpdateQuery(entity)
: dml.getInsertQuery(entity);
jdbcTemplate.execute(query);
context.addEntity(entity);
context.getDatabaseSnapshot(
new EntityKey<>(entity),
EntityHelper.clone(entity)
);
saveSnapshot(new EntityKey(entity));
return entity;
}

@Override
Expand All @@ -54,19 +55,6 @@ public void remove(Object entity) {
context.removeEntity(entity);
}

@Override
public void merge(Object entity) {
persist(entity);
context.getDatabaseSnapshot(
new EntityKey<>(entity), entity
);
}

@Override
public void detach(Object entity) {
context.removeEntity(entity);
}

@Override
public boolean isDirty(Object entity) {
return !hasEntity(entity) || !EntityHelper.equals(
Expand Down Expand Up @@ -97,4 +85,11 @@ private boolean hasEntity(Object entity) {
new EntityKey(entity).getEntityId()
).isPresent();
}

private void saveSnapshot(EntityKey key) {
final Object snapshot = EntityHelper.clone(
context.getEntity(key)
);
context.getDatabaseSnapshot(key, snapshot);
}
}

0 comments on commit 65986b1

Please sign in to comment.