๐Ÿƒ JPA Entity ์ƒํƒœ

 

JPA Entity ์ƒํƒœ ๋ณ€ํ™”

1. New(Transient) state

์ƒˆ๋กญ๊ฒŒ ์ƒ์„ฑ๋œ ์˜ค๋ธŒ์ ํŠธ ๋˜๋Š” JPA Persistence Context์™€ ์—ฐ๊ฒฐ๋œ ์ ์ด ์—†๋Š” ์˜ค๋ธŒ์ ํŠธ์ž…๋‹ˆ๋‹ค.
์˜ค๋ธŒ์ ํŠธ ๋ฐ์ดํ„ฐ๋Š” Database์— ์ €์žฅ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

Employee employee = new Employee("Edward");

2. Persistent(JPA managed) state

Persistence Context์™€ ์—ฐ๊ฒฐ๋œ ์˜ค๋ธŒ์ ํŠธ์ž…๋‹ˆ๋‹ค.
ํ•ด๋‹น ์ƒํƒœ์˜ ์˜ค๋ธŒ์ ํŠธ์— ๋Œ€ํ•œ ๋ชจ๋“  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ Database๋กœ ์ž๋™ ์ „ํŒŒ(Propagated)๋ฉ๋‹ˆ๋‹ค.

EntityManager entityManager = entityManagerFactory.createEntityManager();
EntityTransaction tx = entityManager.getTransaction();
tx.begin();
entityManager.persist(employee);
Lone persistedId = employee.getId();
// entityManager.find(Employee.class, persistedId);
tx.commit();
entityManager.close();

3. Detached(unmanaged) state

Persistence Context๊ฐ€ close(entityManager.close();)๋˜๋ฉด Detached ์ƒํƒœ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.
Detached ์˜ค๋ธŒ์ ํŠธ์˜ ๋ณ€ํ™”๋Š” ๋” ์ด์ƒ ์ž๋™์œผ๋กœ ์ „ํŒŒ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
๋ณ€ํ™”๋ฅผ ๋‹ค์‹œ ์ „ํŒŒํ•˜๋ ค๋ฉด merge(employee = entityManager.merge(employee);)๋ฅผ ์ด์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

4. Removed object state

Database์—์„œ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.
์˜ค์ง Persistent ์˜ค๋ธŒ์ ํŠธ๋งŒ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

employee = entityManager.find(Employee.class, persistedId);
entityManager.remove(employee);



References
https://it-ist.tistory.com/m/171