🎈 ν”ŒλŸ¬μ‹œ

1. ν”ŒλŸ¬μ‹œ λͺ¨λ“œ μ˜΅μ…˜

ν”ŒλŸ¬μ‹œ(flush())λŠ” μ˜μ†μ„± μ»¨ν…μŠ€νŠΈμ˜ λ³€κ²½ λ‚΄μš©μ„ DB에 λ°˜μ˜ν•œλ‹€.

ν”ŒλŸ¬μ‹œ μ‹€ν–‰μ‹œ μΌμ–΄λ‚˜λŠ” 일

  1. λ³€κ²½ 감지가 λ™μž‘ν•΄μ„œ μ˜μ†μ„± μ»¨ν…μŠ€νŠΈμ— μžˆλŠ” λͺ¨λ“  μ—”ν‹°ν‹°λ₯Ό μŠ€λƒ…μƒ·κ³Ό λΉ„κ΅ν•΄μ„œ μˆ˜μ •λœ μ—”ν‹°ν‹°λ₯Ό μ°ΎλŠ”λ‹€. μˆ˜μ •λœ μ—”ν‹°ν‹°λŠ” μˆ˜μ • 쿼리λ₯Ό λ§Œλ“€μ–΄ μ“°κΈ° μ§€μ—° SQL μ €μž₯μ†Œμ— λ“±λ‘ν•œλ‹€.
  2. μ“°κΈ° μ§€μ—° SQL μ €μž₯μ†Œμ˜ 쿼리λ₯Ό DB에 μ „μ†‘ν•œλ‹€.(등둝, μˆ˜μ •, μ‚­μ œ)

μ˜μ†μ„± μ»¨ν…μŠ€νŠΈλ₯Ό ν”ŒλŸ¬μ‹œν•˜λŠ” 방법

//μ˜μ†μ„± μ»¨ν…μŠ€νŠΈμ— μžˆμ§€λ§Œ 아직 DB에 λ°˜μ˜λ˜μ§€ μ•Šμ€ μƒνƒœ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();

JPQL을 μ‹€ν–‰ν•˜λ©΄ SQL둜 λ³€ν™˜λ˜μ–΄ DBμ—μ„œ μ—”ν‹°ν‹°λ₯Ό μ‘°νšŒν•˜λŠ”λ° memberA,B,C μ—”ν‹°ν‹°κ°€ μ—†μœΌλ―€λ‘œ μ‘°νšŒκ°€ λ˜μ§€ μ•ŠλŠ”λ‹€.

λ”°λΌμ„œ 쿼리λ₯Ό μ‹€ν–‰ν•˜κΈ° 직전에 μ˜μ†μ„± μ»¨ν…μŠ€νŠΈλ₯Ό ν”ŒλŸ¬μ‹œν•΄μ„œ λ³€κ²½ λ‚΄μš©μ„ DB에 λ°˜μ˜ν•΄μ•Ό ν•œλ‹€.

JPAλŠ” 이런 문제λ₯Ό μ˜ˆλ°©ν•˜κΈ° μœ„ν•΄ JPQL을 μ‹€ν–‰ν•  λ•Œλ„ μžλ™μœΌλ‘œ ν”ŒλŸ¬μ‹œλ₯Ό ν˜ΈμΆœν•œλ‹€.

β—μ‹λ³„μžλ₯Ό κΈ°μ€€μœΌλ‘œ μ‘°νšŒν•˜λŠ” find()λ₯Ό ν˜ΈμΆœν•  λ•ŒλŠ” ν”ŒλŸ¬μ‹œκ°€ μ‹€ν–‰λ˜μ§€ μ•ŠμŒ.

1. ν”ŒλŸ¬μ‹œ λͺ¨λ“œ μ˜΅μ…˜

μ—”ν‹°ν‹° λ§€λ‹ˆμ €μ—μ„œ ν”ŒλŸ¬μ‹œ λͺ¨λ“œλ₯Ό 직접 μ§€μ •ν•˜λ €λ©΄

javax.persistence.FlushModeType을 μ‚¬μš©ν•˜λ©΄ λœλ‹€.

ν”ŒλŸ¬μ‹œ λͺ¨λ“œ 직접 μ„€μ • : em.setFlushMode(FlushModeType.COMMIT)