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