๐นย ์ ๋ฆฌ by ์ฅ๋ฏธ(https://velog.io/@newbiekim/)
Dirty Checking์ด๋ ๋ณ๊ฒฝ ๊ฐ์ง๋ฅผ ๋งํ๋ค.
๊ธธ๊ฒ ๋งํ ๊ฒ ์์ด ์๋ ์ฝ๋๋ฅผ ์์๋ก ์์๋ณด์.
EntityManager em = emf.createEntityManager();
EntityTransaction transaction = em.getTransaction();
transaction.begin(); //[ํธ๋์ญ์
] ์์
//์์ ์ํฐํฐ ์กฐํ
Member memberA = em.find(Member.class, "memberA");
//์์ ์ํฐํฐ ๋ฐ์ดํฐ ์์
memberA.setUsername("rose");
memberA.setAge(100);
//em.update(member) <- ์ด๋ฐ ์ฝ๋๊ฐ ์์ด์ผ ํ์ง ์์๊น?
transaction.commit(); //[ํธ๋์ญ์
] ์ปค๋ฐ
๋ง์ฝ ๋ด๊ฐ ์ ์ ๋ค์์ rose๋ก, ๋์ด๋ฅผ 100์ด๋ก ๋ฐ๊ฟจ๋ค๊ณ ํด๋ณด์.
๊ทธ๋ผ ์ด ๋ ๋ด๊ฐ update๋ฅผ ํ๊ฑฐ๋ persist๋ฅผ ๋ค์ ํด ์ค์ผ ํ์ง ์์๊น? JPA์๊ฒ ๋ฐ์ดํฐ๊ฐ ๋ฐ๋์๋ค๋ ๊ฑธ ์๋ ค์ค์ผ ํ์ง ์์๊น? ์ถ์ ๊ฒ์ด๋ค.
ํ์ง๋ง ๋ฐ๋ก ๊ทธ๋ด ํ์ ์์ด commit๋ง ํ๋ฉด ์๋์ผ๋ก ์ ๋ฐ์ดํธ ์ฟผ๋ฆฌ๊ฐ ์คํ๋๋ค.
๊ทธ๋ผ ์๋ ๋ด๊ฐ ๋ฐ์ดํฐ๋ฅผ ์์ ํ๋ค๋ ๊ฑธ ์ด๋ป๊ฒ ์๊น?
๊ทธ๊ฑด ๋ฐ๋ก ์ค๋ ์ท ๋๋ถ์ด๋ค.
JPA์์๋ ์ํฐํฐ๋ฅผ ์กฐํํ๋ฉด ํด๋น ์ํฐํฐ์ ์กฐํ ์ํ ๊ทธ๋๋ก ์ค๋ ์ท์ ๋ง๋ค์ด๋๋๋ค.
ํ๋ฌ์(์์์ฑ ์ปจํ ์คํธ์ ๋ณ๊ฒฝ ๋ด์ฉ์ DB์ ๋ฐ์) ๋๋ ์๊ฐ ์ํฐํฐ์ ์ค๋ ์ท์ ๋น๊ตํด ๋ฐ๋ ๊ฒ ์๋ค๋ฉด UPDATE ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ์ฌ DB์ ๋ณด๋ธ๋ค.
์์์ฑ ์ปจํ ์คํธ์์ ๊ด๋ฆฌํ๋ ๋ฐ์ดํฐ๋ค์ ์ด๋ค ๊ฒ์ด ๋ณ๊ฒฝ๋๋์ง ๊ฑ๋ค๋ค์ด ๋ค ์๋ค. ๊ทธ๋์ ์ฐ๋ฆฌ๊ฐ ๋ฐ๋ก ์๋ ค์ค ํ์๊ฐ ์๋ ๊ฒ์ด๋ค. (โ ์ค์์, ๋น์์ ์ํ์ ์ํฐํฐ๋ ๋ํฐ ์ฒดํน ๋์์ ํฌํจ๋์ง ์๋๋ค.)