Spring 🌱

[JPA] μ˜μ†μ„± μ»¨ν…μŠ€νŠΈ

z.zzz 2023. 7. 25. 19:23

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

- μ—”ν‹°ν‹°λ₯Ό 영ꡬ μ €μž₯ν•˜λŠ” ν™˜κ²½μ„ μ˜λ―Έν•œλ‹€.

- EntityManager APIλ₯Ό 톡해 μ˜μ†μ„± μ»¨ν…μŠ€νŠΈμ— μ ‘κ·Όν•˜μ—¬ μ—”ν‹°ν‹° μΈμŠ€ν„΄μŠ€λ₯Ό 생성, 쑰회, μ‚­μ œν•  수 μžˆλ‹€.

 

 

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

λΉ„μ˜μ†

- μ˜μ†μ„± μ»¨ν…μŠ€νŠΈμ™€ μ „ν˜€ 관계가 μ—†λŠ” μƒˆλ‘œμš΄ μƒνƒœλ₯Ό μ˜λ―Έν•œλ‹€.

- new둜 객체λ₯Ό μƒμ„±ν–ˆμ„ λ•Œ, 이 κ°μ²΄λŠ” λΉ„μ˜μ† μƒνƒœλΌκ³  말할 수 μžˆλ‹€.

Member member = new Member();
member.setId("member1");
member.setUsername("νšŒμ›1");

 

μ˜μ†

- μ˜μ†μ„± μ»¨ν…μŠ€νŠΈμ— μ˜ν•΄ κ΄€λ¦¬λ˜λŠ” μƒνƒœλ₯Ό μ˜λ―Έν•œλ‹€.

- em.persist둜 객체λ₯Ό μ˜μ†μ„± μ»¨ν…μŠ€νŠΈμ— μ €μž₯ν•  수 μžˆλ‹€.(μ˜μ†ν™”)

* 이 μ‹œμ μ— 객체λ₯Ό μ˜μ†μ„± μ»¨ν…μŠ€νŠΈμ— μ €μž₯ν•˜λŠ” 것이지 DB에 μ €μž₯ν•˜λŠ” 건 μ•„λ‹ˆλ‹€! DB에 μ €μž₯은 νŠΈλžœμž­μ…˜μ„ μ»€λ°‹ν•˜λŠ” μ‹œμ μ— λ°œμƒν•œλ‹€.

em.persist(member);

 

μ€€μ˜μ†

μ˜μ†μ„± μ»¨ν…μŠ€νŠΈμ— μ €μž₯λ˜μ—ˆλ‹€κ°€ λΆ„λ¦¬λœ μƒνƒœλ₯Ό μ˜λ―Έν•œλ‹€.

em.detach(member);

 

μ‚­μ œ

μ˜μ†μ„± μ»¨ν…μŠ€νŠΈμ—μ„œ 객체λ₯Ό μ‚­μ œν•œ μƒνƒœλ₯Ό μ˜λ―Έν•œλ‹€.

em.remove(member);

 

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

1. 1μ°¨ μΊμ‹œ

μ—”ν‹°ν‹°λ₯Ό μ‘°νšŒν•  λ•Œ μš°μ„ μ μœΌλ‘œ μ˜μ†μ„± μ»¨ν…μŠ€νŠΈμ˜ 1μ°¨ μΊμ‹œμ—μ„œ μ‘°νšŒν•΄λ³Έ ν›„, μ—†μœΌλ©΄ DBλ₯Ό μ‘°νšŒν•œλ‹€. μΊμ‹œμ— μžˆλŠ” 데이터λ₯Ό μ°ΎλŠ” 경우 λΉ λ₯΄κ²Œ μ‘°νšŒν•  수 μžˆλ‹€.

 

2. 동일성 보μž₯

λ™μΌν•œ νŠΈλžœμž­μ…˜μ—μ„œ μ‘°νšŒν•œ μ—”ν‹°ν‹°λŠ” κ°™μŒμ„ 보μž₯ν•œλ‹€.

 

3. μ“°κΈ° 지연

νŠΈλžœμž­μ…˜μ„ μ»€λ°‹ν•˜κΈ° μ „κΉŒμ§„ INSERT SQL을 λͺ¨μ•„λ‘”λ‹€. νŠΈλžœμž­μ…˜μ΄ μ»€λ°‹λ˜λŠ” μˆœκ°„ λ°μ΄ν„°λ² μ΄μŠ€μ— 쿼리λ₯Ό 보낸닀. λ”°λΌμ„œ DB 컀λ„₯μ…˜ μ‹œκ°„μ„ 쀄일 수 있고, ν•œ νŠΈλžœμž­μ…˜μ΄ ν…Œμ΄λΈ”μ— μ ‘κ·Όν•˜λŠ” μ‹œκ°„ λ˜ν•œ 쀄일 수 μžˆλ‹€.

 

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

μ˜μ†μ„± μ»¨ν…μŠ€νŠΈλŠ” 1μ°¨ μΊμ‹œκ°€ 듀어왔을 λ•Œμ˜ 값을 μŠ€λƒ…μƒ·μ— μ €μž₯ν•΄λ‘”λ‹€. νŠΈλžœμž­μ…˜μ„ μ»€λ°‹ν•˜λŠ” μ‹œμ μ—μ„œ μ˜μ† μ—”ν‹°ν‹°κ°€ μŠ€λƒ…μƒ·κ³Ό λ‹€λ₯Έ 값을 가진닀면, λ³€κ²½λœ κ°’μœΌλ‘œ μ•Œμ•„μ„œ λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό μ—…λ°μ΄νŠΈν•œλ‹€.

 

5. μ§€μ—°λ‘œλ”©