HyeLog
[๊น์ํ_์๋ฐ ORM ํ์ค JPA ํ๋ก๊ทธ๋๋ฐ - ๊ธฐ๋ณธํธ] 2. ์์์ฑ ๊ด๋ฆฌ ๋ณธ๋ฌธ
[๊น์ํ_์๋ฐ ORM ํ์ค JPA ํ๋ก๊ทธ๋๋ฐ - ๊ธฐ๋ณธํธ] 2. ์์์ฑ ๊ด๋ฆฌ
shj718 2022. 6. 8. 17:29๐ฟ ์์์ฑ ์ปจํ ์คํธ๋?
- ์์์ฑ ์ปจํ ์คํธ๋ Entity๋ฅผ ์๊ตฌ ์ ์ฅํ๋ ํ๊ฒฝ์ด๋ค. EntityManager๋ฅผ ํตํด์ ์์์ฑ ์ปจํ ์คํธ์ ์ ๊ทผํ๋ค.
์์์ฑ ์ปจํ ์คํธ๋ ํธ๋์ญ์ ๋จ์๋ผ๋ ๊ฒ์ด ์ค์ํ๋ค.
EntityManager.persist(entity);
- Entity๊ฐ ์์์ฑ ์ปจํ ์คํธ์์ ๊ด๋ฆฌ๋๋ ์ํ๋ฅผ ์์์ด๋ผ๊ณ ํ๊ณ , ๊ด๋ฆฌ๋์ง ์๋ ์๋ก์ด ์ํ๋ฅผ ๋น์์์ด๋ผ๊ณ ํ๋ค.
persist()๋ฅผ ํ๋ฉด, ์์ ์ํ๊ฐ ๋๋ค. ์ฆ, persist()๋ ์ฌ์ค ์ํฐํฐ๋ฅผ DB์ ์ ์ฅํ๋ ํจ์๊ฐ ์๋๋ผ, ์์์ฑ ์ปจํ ์คํธ์ ๋ฃ๋ ํจ์์ด๋ค. ์ํฐํฐ๊ฐ ์ค์ ๋ก DB์ ์ ์ฅ๋๋ ์์ ์ ํธ๋์ญ์ ์ด commit() ๋ ๋์ด๋ค.
๐ฟ ์์์ฑ ์ปจํ ์คํธ์ ์ด์
- 1์ฐจ ์บ์ (ํ๋์ ํธ๋์ญ์ ๋ด์์)
Ex 1)
Member member = new Member();
member.setId(103L);
member.setName("HelloJPA");
entityManager.persist(member);
Member findMember3 = entityManager.find(Member.class, 103L);
์ด๋ ๊ฒ persist()๋ฅผ ํ๋ฉด, 1์ฐจ ์บ์์ ์ํฐํฐ๊ฐ ์ ์ฅ๋๋ค. ๋ฐ๋ผ์ ํด๋น ํธ๋์ญ์ ๋ด์์ find()๋ฅผ ์คํํ๋ฉด, DB์ SELECT ์ฟผ๋ฆฌ๋ฅผ ๋ ๋ฆฌ์ง ์๊ณ , 1์ฐจ ์บ์์์ ์ํฐํฐ๋ฅผ ์ฐพ์์จ๋ค.
Ex 2)
Member findMember1 = entityManager.find(Member.class, 101L);
Member findMember2 = entityManager.find(Member.class, 101L);
์ด๋ ๊ฒ ์ฐ์์ ์ผ๋ก find()๋ฅผ ํ๋ ๊ฒฝ์ฐ์๋ ์ฒซ๋ฒ์งธ find()์์๋ DB์ SELECT ์ฟผ๋ฆฌ๋ฅผ ๋ ๋ฆฌ์ง๋ง, ๋๋ฒ์งธ find()์์๋ DB์ ์ ๊ทผํ์ง ์๊ณ , 1์ฐจ ์บ์์์ ์ํฐํฐ๋ฅผ ๊ฐ์ ธ์จ๋ค.
- ์์ Entity์ ๋์ผ์ฑ ๋ณด์ฅ
Member a = em.find(Member.class, 100L);
Member b = em.find(Member.class, 100L);
System.out.println(a == b); //๋์ผ์ฑ ๋น๊ต true
- ์ฐ๊ธฐ ์ง์ฐ
persist()๋ฅผ ํ๋ฉด 1์ฐจ ์บ์ ๋ฟ๋ง ์๋๋ผ, ์ฐ๊ธฐ ์ง์ฐ SQL ์ ์ฅ์์๋ ํด๋น INSERT๋ฌธ์ด ์ ์ฅ๋๋ค.
์ ์ฅ๋ INSERT๋ฌธ๋ค์ ํธ๋์ญ์ ์ด ์ปค๋ฐํ ๋ DB์ ์คํ๋๋ค.
em.persist(memberA);
em.persist(memberB);
//์ฌ๊ธฐ๊น์ง INSERT SQL์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ณด๋ด์ง ์๋๋ค.
//์ปค๋ฐํ๋ ์๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ INSERT SQL์ ๋ณด๋ธ๋ค.
transaction.commit();
- ๋ณ๊ฒฝ ๊ฐ์ง
์ ๋ฒ ๊ธ์์๋ ์ธ๊ธํ๋ฏ์ด Entity์ ์์ฑ(Ex. name)์ ๋ณ๊ฒฝํ๊ณ ์ ํ ๋ set()๋ง ํด์ฃผ๋ฉด ๋๋ค. (= persistํ ํ์ X)
์ด๋ ์์์ฑ ์ปจํ ์คํธ์์ DB์ commit()ํ๊ธฐ ์ ์, 1์ฐจ ์บ์์ ์๋ ์ํฐํฐ์ ์ฒ์ ์ํ(findํ ๋น์์ ์ํ)์ ๋ง์ง๋ง ์ํ๋ฅผ ๋น๊ตํ๋ ๊ณผ์ ์ ๊ฑฐ์น๊ธฐ ๋๋ฌธ์ด๋ค.
Member findMember = entityManager.find(Member.class, 160L);
findMember.setName("Changed");
- Entity ์ญ์
Member findMember = entityManager.find(Member.class, 160L);
entityManager.remove(findMember);
๐ฟ ํ๋ฌ์(Flush)๋?
ํ๋ฌ์๋ ์์์ฑ ์ปจํ ์คํธ์ ๋ณ๊ฒฝ ๋ด์ฉ์ DB์ ์ค์ ๋ก ๋ฐ์ํ๋ ๊ฒ์ด๋ค.
ํธ๋์ญ์ commit()์ ์๋์ผ๋ก ํ๋ฌ์๋ฅผ ํธ์ถํ๋ค. JPQL ์ฟผ๋ฆฌ๋ฅผ ์คํํ ๋๋ ํ๋ฌ์๋ ์๋์ผ๋ก ํธ์ถ๋๋ค. ์ง์ em.flush()๋ก ํ๋ฌ์๋ฅผ ํธ์ถํ ์๋ ์๋ค.
ํ๋ฌ์๋ ์์์ฑ ์ปจํ ์คํธ๋ฅผ ๋น์ฐ๋ ๊ฒ์ด ์๋๋ผ, ์์์ฑ ์ปจํ ์คํธ์ ๋ณ๊ฒฝ ๋ด์ฉ์ DB์ ๋๊ธฐํํ๋ ๊ฒ์ด๋ค.