-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathEntityManagerImpl.java
More file actions
65 lines (48 loc) · 2.03 KB
/
EntityManagerImpl.java
File metadata and controls
65 lines (48 loc) · 2.03 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
package com.yourssu.entitymanager;
import java.util.HashMap;
import java.util.Map;
public class EntityManagerImpl implements EntityManager {
private final Map<Long, User> persistenceContext = new HashMap<>();
private long sequence = 1L;
// id가 null일 때 호출 (비영속 → 영속)
@Override
public void persist(Object entity) {
if (!(entity instanceof User)) {
throw new IllegalArgumentException("일단은 User 엔티티만 지원합니다.");
}
User user = (User) entity;
if (user.getId() != null) {
throw new IllegalStateException("이미 ID가 존재하는 엔티티입니다. persist 불가.");
}
user.setId(sequence++);
persistenceContext.put(user.getId(), user);
System.out.println("[persist] 저장됨: " + user.getId() + ", " + user.getName());
}
// 이미 ID가 있는 객체일 때 (준영속 → 영속)
@Override
public <T> T merge(T entity) {
if (!(entity instanceof User)) {
throw new IllegalArgumentException("일단은 User 엔티티만 지원합니다.");
}
User detached = (User) entity;
if (detached.getId() == null) {
throw new IllegalStateException("ID가 없는 엔티티는 merge할 수 없습니다.");
}
User managed = persistenceContext.get(detached.getId());
if (managed == null) {
managed = new User();
managed.setId(detached.getId());
persistenceContext.put(managed.getId(), managed);
}
managed.setName(detached.getName());
System.out.println("[merge] 병합됨: " + managed.getId() + ", " + managed.getName());
return (T) managed;
}
public void printStore() {
System.out.println("== 현재 영속성 컨텍스트 상태 ==");
for (Map.Entry<Long, User> entry : persistenceContext.entrySet()) {
User u = entry.getValue();
System.out.println("id=" + u.getId() + ", name=" + u.getName());
}
}
}