songining
Published 2022. 1. 13. 16:10
JPA μ˜μ†μ„± BACKEND/Spring

JPAμ—μ„œ κ°€μž₯ μ€‘μš”ν•œ 2가지

- 객체와 κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€ λ§€ν•‘ν•˜κΈ°

- μ˜μ†μ„± μ»¨ν…μŠ€νŠΈ(μ—”ν‹°ν‹°λ₯Ό 영ꡬ μ €μž₯ν•˜λŠ” ν™˜κ²½) 

 

μ—”ν‹°ν‹°λ§€λ‹ˆμ €λ₯Ό 톡해 μ˜μ†μ„± μ»¨ν…μŠ€νŠΈμ— μ ‘κ·Ό 

 

μ—”ν‹°ν‹°μ˜ 생λͺ…μ£ΌκΈ°

- λΉ„μ˜μ† : 객체λ₯Ό μƒμ„±ν•œ μƒνƒœ

- μ˜μ† : 객체λ₯Ό μ˜μ†μ„± μ»¨ν…μŠ€νŠΈμ— μ €μž₯ν•œ μƒνƒœ (EX) persist()  / But, μ»€λ°‹κΉŒμ§€ ν•΄μ•Ό 디비에 쿼리 날라감) 

- μ€€μ˜μ† : μ˜μ† μƒνƒœμ˜ μ—”ν‹°ν‹°κ°€ μ˜μ†μ„± μ»¨ν…μŠ€νŠΈμ—μ„œ 뢄리(detach(entity), clear(), close())

- μ‚­μ œ

 

μ˜μ†μ„± μ»¨ν…μŠ€νŠΈμ˜ 이점 

• 1μ°¨ μΊμ‹œ

 λ™μΌμ„±(identity) 보μž₯ (같은 νŠΈλžœμž­μ…˜μ—μ„œ λΉ„κ΅μ‹œμ—) 

 νŠΈλžœμž­μ…˜μ„ μ§€μ›ν•˜λŠ” μ“°κΈ° 지연

(transactional write-behind)

 λ³€κ²½ 감지(Dirty Checking)

 μ§€μ—° λ‘œλ”©(Lazy Loading)

 

//객체λ₯Ό μƒμ„±ν•œ μƒνƒœ(λΉ„μ˜μ†)
Member member = new Member();
member.setId("member1");
member.setUsername(“νšŒμ›1”);
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();

//객체λ₯Ό μ €μž₯ν•œ μƒνƒœ(μ˜μ†)
//1μ°¨ μΊμ‹œμ— μ €μž₯
em.persist(member);

persist μ‹œμ— μ˜μ†μ„± μ»¨ν…μŠ€νŠΈμ•ˆμ— λ“€μ–΄κ°„λ‹€.(dbμ—λŠ” 듀어가지 μ•Šμ€ μƒνƒœ

commit κΉŒμ§€ ν•΄μ•Ό 쿼리λ₯Ό λ‚ λ € db에 λ“€μ–΄κ°„λ‹€. 

(persistν•˜λ©΄ 1μ°¨ μΊμ‹œμ— μ €μž₯해놓기 λ•Œλ¬Έμ— μ‘°νšŒν•  λ•Œ 디비에 쿼리λ₯Ό λ‚ λ € μ‘°νšŒν•˜μ§€ μ•Šκ³  

1μ°¨μΊμ‹œμ—μ„œ μ‘°νšŒν•˜μ—¬ 쿼리λ₯Ό 쀄일 수 μžˆλ‹€.)

 

μ˜μ† μƒνƒœκ°€ λ˜λŠ” 경우 ?

- persist 

- find 

 

+) ν”ŒλŸ¬μ‹œλž€(flush)?

- μ˜μ†μ„± μ»¨ν…μŠ€νŠΈμ˜ λ³€κ²½λ‚΄μš©μ„ λ°μ΄ν„°λ² μ΄μŠ€μ— 반영

 - νŠΈλžœμž­μ…˜ 컀밋 λ˜λŠ” JPQL 쿼리 μ‹€ν–‰μ‹œ ν”ŒλŸ¬μ‹œ μžλ™ 호좜 

- ν”ŒλŸ¬μ‹œν•˜λ”λΌλ„ 1μ°¨ μΊμ‹œμ—λŠ” κ·ΈλŒ€λ‘œ λ‚¨μ•„μžˆλ‹€. (μ˜μ†μ„± μ»¨ν…μŠ€νŠΈλ₯Ό λΉ„μš°μ§€ μ•ŠμŒ)