๐ ํ๋ฌ์
ํ๋ฌ์( flush() )๋ ์์์ฑ ์ปจํ ์คํธ์ ๋ณ๊ฒฝ ๋ด์ฉ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ํ๋ค. ํ๋ฌ์๋ฅผ ์คํํ๋ฉด ๊ตฌ์ฒด์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ ์ผ์ด ์ผ์ด๋๋ค.
- ๋ณ๊ฒฝ ๊ฐ์ง๊ฐ ๋์ํด์ ์์์ฑ ์ปจํ ์คํธ์ ์๋ ๋ชจ๋ ์ํฐํฐ๋ฅผ ์ค๋ ์ท๊ณผ ๋น๊ตํด ์์ ๋ ์ํฐํฐ๋ฅผ ์ฐพ๋๋ค. ์์ ๋ ์ํฐํฐ๋ ์์ ์ฟผ๋ฆฌ๊ฐ ๋ง๋ค์ด ์ฐ๊ธฐ ์ง์ฐ SQL ์ ์ฅ์์ ๋ฑ๋กํ๋ค.
- ์ฐ๊ธฐ ์ง์ฐ SQL ์ ์ฅ์์ ์ฟผ๋ฆฌ๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์กํ๋ค.(๋ฑ๋ก, ์์ , ์ญ์ ์ฟผ๋ฆฌ)
๐ ํ๋ฌ์ ํธ์ถ ๋ฐฉ๋ฒ
์์์ฑ ์ปจํ ์คํธ๋ฅผ ํ๋ฌ์ํ๋ ๋ฐฉ๋ฒ์ ์๋์ 3๊ฐ์ง์ด๋ค.
- em.flush() ๋ฅผ ์ง์ ํธ์ถ
- ํธ๋์ญ์ ์ปค๋ฐ ์ ํ๋ฌ์๊ฐ ์๋ ํธ์ถ
- JPQL ์ฟผ๋ฆฌ ์คํ ์ ํ๋ฌ์๊ฐ ์๋ ํธ์ถ
ํ๋์ฉ ์ดํด๋ณด์.
1๏ธโฃ ์ง์ ํธ์ถ( em.flush() )
์ํฐํฐ ๋งค๋์ ์ flush() ๋ฉ์๋๋ฅผ ์ง์ ํธ์ถํด์ ์์์ฑ ์ปจํ ์คํธ๋ฅผ ๊ฐ์ ๋ก ํ๋ฌ์ํ๋ ๋ฐฉ๋ฒ์ด๋ค. ํ ์คํธ๋ ๋ค๋ฅธ ํ๋ ์์ํฌ์ JPA๋ฅผ ํจ๊ป ์ฌ์ฉํ ๋๋ฅผ ์ ์ธํ๊ณ ๊ฑฐ์ ์ฌ์ฉํ์ง ์๋๋ค.
2๏ธโฃ ํธ๋์ญ์ ์ปค๋ฐ ์
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ณ๊ฒฝ ๋ด์ฉ์ SQL๋ก ์ ๋ฌํ์ง ์๊ณ ํธ๋์ญ์ ๋ง ์ปค๋ฐํ๋ฉด ์ด๋ค ๋ฐ์ดํฐ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์๋์ง ์๋๋ค. ๋ฐ๋ผ์ ์ปค๋ฐ ์ ์ ๊ผญ ํ๋ฌ์๋ฅผ ํธ์ถํด ๋ณ๊ฒฝ ๋ด์ฉ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ํด์ผ ํ๋ค.
JPA๋ ์ด๋ฐ ๋ฌธ์ ๋ฅผ ์๋ฐฉํ๊ธฐ ์ํด์ ํธ๋์ญ์ ์ ์ปค๋ฐํ ๋ ํ๋ฌ์๋ฅผ ์๋์ผ๋ก ํธ์ถํ๋ค.
3๏ธโฃ JPQL ์ฟผ๋ฆฌ ์คํ ์
JPQL์ด๋ Criteria ๊ฐ์ ๊ฐ์ฒด์งํฅ ์ฟผ๋ฆฌ๋ฅผ ํธ์ถํ ๋๋ ํ๋ฌ์๊ฐ ์คํ๋๋ค.
๊ทธ ์ด์ ๋ฅผ ๋ค์ ์ฝ๋์ ํจ๊ป ์ดํด๋ณด์.
- JPQL ์ฟผ๋ฆฌ ์คํ ์ฝ๋
em.persist(memberA);
em.persist(memberB);
em.persist(memberC);
// ์ค๊ฐ์ JPQL ์คํ
query = em.createQuery("select m from Member m", Member.class);
List<Member> members = query.getResultList();
๋จผ์ , em.persist()๋ฅผ ํตํด ์ํฐํฐ๋ค์ ์์ ์ํ๋ก ๋ง๋ค์๋ค. ์ด ์ํฐํฐ๋ค์ ์์ง ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์๋์ง ์์๋ค. ์ด๋ JPQL์ ์คํํ๋ฉด ์ด๋ป๊ฒ ๋ ๊น? JPQL์ SQL๋ก ๋ณํ๋์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ํฐํฐ๋ฅผ ์กฐํํ๋ค. ํ์ง๋ง ์์ง ์ํฐํฐ๋ค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์๊ธฐ ๋๋ฌธ์ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋ก ๋ฐํ๋์ง ์๋๋ค.
๋ฐ๋ผ์ ์ฟผ๋ฆฌ๋ฅผ ์คํํ๊ธฐ ์ง์ ์ ์์์ฑ ์ปจํ ์คํธ๋ฅผ ํ๋ฌ์ํด์ ๋ณ๊ฒฝ ๋ด์ฉ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ํด์ผ ํ๋ค. JPA๋ ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ์๋ฐฉํ๊ธฐ ์ํด JPQL์ ์คํํ ๋๋ ํ๋ฌ์๋ฅผ ์๋ ํธ์ถํ๋ค. ๋ฐ๋ผ์ memberA, memberB, memberC๋ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ์ ํฌํจ๋๋ค.
์ฐธ๊ณ ) find() ๋ฉ์๋๋ฅผ ํธ์ถํ ๋๋ ํ๋ฌ์๊ฐ ์คํ๋์ง ์๋๋ค.
๐ ํ๋ฌ์ ๋ชจ๋ ์ต์
์ํฐํฐ ๋งค๋์ ์ ํ๋ฌ์ ๋ชจ๋๋ฅผ ์ง์ ์ง์ ํ๋ ค๋ฉด javax.persistence.FlushModeType ์ ์ฌ์ฉํ๋ฉด ๋๋ค.
- FlushModeType.AUTO : ์ปค๋ฐ์ด๋ ์ฟผ๋ฆฌ๋ฅผ ์คํํ ๋ ํ๋ฌ์(Default)
- FlushModeType.COMMIT : ์ปค๋ฐํ ๋๋ง ํ๋ฌ์
ํ๋ฌ์ ๋ชจ๋๋ฅผ ๋ณ๋๋ก ์ง์ ํ์ง ์์ผ๋ฉด AUTO๋ก ๋์ํ๋ค. COMMIT ๋ชจ๋๋ ์ฑ๋ฅ์ ์ต์ ํ๋ฅผ ์ํด ์ฌ์ฉํ ์ ์๋๋ฐ ์์ธํ ๋ด์ฉ์ ๋ค์์ ์์๋ณด์.
// ํ๋ฌ์ ๋ชจ๋ ์ง์ ์ค์
em.setFlushMode(FlushModeType.COMMIT);
์ค์
ํ๋ฌ์๋ ์์์ฑ ์ปจํ ์คํธ์ ๋ณด๊ด๋ ์ํฐํฐ๋ฅผ ์ง์ฐ๋ ๊ฒ์ด ์๋๋ค. ์์์ฑ ์ปจํ ์คํธ์ ๋ณ๊ฒฝ ๋ด์ฉ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋๊ธฐํํ๋ ๊ฒ์ด๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋๊ธฐํ๋ฅผ ์ต๋ํ ๋ฆ์ถ๋ ๊ฒ์ด ๊ฐ๋ฅํ ์ด์ ๋ ํธ๋์ญ์ ์ด๋ผ๋ ์์ ๋จ์๊ฐ ์๊ธฐ ๋๋ฌธ์ด๋ค. ํธ๋์ญ์ ์ปค๋ฐ ์ง์ ์๋ง ๋ณ๊ฒฝ ๋ด์ฉ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ณด๋ด ๋๊ธฐํํ๋ฉด ๋๋ค.
์ฐธ๊ณ
์๋ฐ ORM ํ์ค JPA ํ๋ก๊ทธ๋๋ฐ(๊น์ํ ์ )
'JPA' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JPA] ์ํฐํฐ ๋งคํ(1) - @Entity @Table (0) | 2023.04.27 |
---|---|
[JPA] ์ค์์ (0) | 2023.04.27 |
[JPA] ์์์ฑ ์ปจํ ์คํธ์ ํน์ง (1) | 2023.04.17 |
[JPA] ์์์ฑ ๊ด๋ฆฌ - ์ํฐํฐ ๋งค๋์ /ํฉํ ๋ฆฌ, ์์์ฑ ์ปจํ ์คํธ, ์ํฐํฐ ์๋ช ์ฃผ๊ธฐ (0) | 2023.04.15 |
[JPA] ์ํฐํฐ ๋งค๋์ ์ค์ + ํธ๋์ญ์ ๊ด๋ฆฌ + ๋น์ฆ๋์ค ๋ก์ง (2) | 2023.04.14 |