Search

JPA

1.
JPA μ†Œκ°œ
a.
SQL 쀑심적인 개발의 문제점
β€’
DB μ„Έκ³„μ˜ ν—€κ²Œλͺ¨λ‹ˆ
β—¦
κ΄€κ³„ν˜• DB
β€’
객체λ₯Ό κ΄€κ³„ν˜• DB 에 μ €μž₯
β€’
λ¬΄ν•œ 반볡, μ§€λ£¨ν•œ μ½”λ“œ(CRUD, 객체 β†’ SQL, SQLβ†’ 객체, ν•„λ“œ μΆ”κ°€ λ“±)
β€’
SQL에 의쑴적인 κ°œλ°œμ„ ν”Όν•˜κΈ° μ–΄λ ΅λ‹€
β€’
νŒ¨λŸ¬λ‹€μž„μ˜ 뢈일치
β—¦
객체 vs κ΄€κ³„ν˜• DB
β–ͺ
상속
β€’
쑰회, μ‚½μž… λ“± λ³΅μž‘ν•˜λ‹€.
β–ͺ
연관관계
β€’
μ°Έμ‘° vs μ™Έλž˜ ν‚€
β€’
κ°μ²΄λŠ” 단방ν–₯, μ™Έλž˜ν‚€λŠ” μ–‘λ°©ν–₯
β–ͺ
데이터 νƒ€μž…
β–ͺ
데이터 식별 방법
β—¦
객체 μ €μž₯μ‹œ
β–ͺ
RDB, NoSQL, File λ“±
β—¦
객체 SQL 맀핑을 κ°œλ°œμžκ°€ 함
2.
JPA μ†Œκ°œ
a.
JPAλŠ” ν‘œμ€€ λͺ…μ„Έ
b.
JPAλ₯Ό μ™œ μ‚¬μš©ν•΄μ•Ό ν•˜λŠ”κ°€?
i.
생산성
1.
persist, find, setName, remove λ“±
ii.
μœ μ§€λ³΄μˆ˜
iii.
νŒ¨λŸ¬λ‹€μž„μ˜ 뢈일치 ν•΄κ²°
1.
상속
a.
μ•Œμ•„μ„œ insert λ‘κ°œλ‚ λ¦Ό
2.
연관관계
a.
μ•Œμ•„μ„œ join ν•΄μ„œ λ‚ λ¦Ό
3.
같은 νŠΈλžœμž­μ…˜μ—μ„œ μ‘°νšŒν•œ μ—”ν„°ν‹°λŠ” κ°™λ‹€κ³  보μž₯
4.
μ„±λŠ₯ ν–₯상
a.
1μ°¨ μΊμ‹œμ™€ 동일성 보μž₯
b.
μ“°κΈ° 지연
c.
지연 λ‘œλ”©κ³Ό μ¦‰μ‹œ λ‘œλ”©
μ˜μ†μ„± μ»¨ν…μŠ€νŠΈ(pc)
β€’
μ—”ν„°ν‹°λ₯Ό 영ꡬ μ €μž₯ν•˜λŠ” ν™˜κ²½
β—¦
db에 μ €μž₯ν•˜λŠ” 것이 μ•„λ‹ˆλΌ μ˜μ†μ„± μ»¨ν…μŠ€νŠΈ λΌλŠ” 곳에 μ €μž₯
β€’
em.persist(entity);
β€’
μ˜μ†μ„± μ»¨ν…μŠ€νŠΈλŠ” 논리적인 κ°œλ…
β€’
μ—”ν„°ν‹° λ§€λ‹ˆμ €λ₯Ό 톡해 μ˜μ»¨μ— μ ‘κ·Ό
β€’
em κ³Ό pcκ°€ 1:1(J2SE ν™˜κ²½)
β€’
em κ³Ό pcκ°€ n:1(J2EE, spring framework 같은 μ»¨ν…Œμ΄λ„ˆ ν™˜κ²½)

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

β€’
λΉ„μ˜μ†(new, transient)
β—¦
pc 와 μ „ν˜€ 관계가 μ—†λŠ” μƒˆλ‘œμš΄ μƒνƒœ
β€’
μ˜μ†(managed)
β—¦
pc 에 κ΄€λ¦¬λ˜λŠ” μƒνƒœ
β€’
μ€€μ˜μ†(detached)
β—¦
pc 에 μ €μž₯λ˜μ—ˆλ‹€κ°€ λΆ„λ¦¬λœ μƒνƒœ
β€’
μ‚­μ œ
β€’
em.persist ν•˜λ©΄ pc 에 μ €μž₯(db μ €μž₯ x)
β€’
em.commit ν•  λ•Œ 쿼리가 날라감

PC 의 이점

β€’
1μ°¨ μΊμ‹œ
β€’
동일성 보μž₯
β€’
νŠΈλžœμž­μ…˜μ„ μ§€μ›ν•˜λŠ” μ“°κΈ° 지연
β—¦
pc λ‚΄λΆ€ μ“°κΈ° 지연 SQL μ €μž₯μ†Œμ— insert sql 생성
β—¦
이후 commit() 이 λ‚ μ•„μ˜€λ©΄ flush() 둜 insert sql 보냄
β€’
μ—”ν„°ν‹° μˆ˜μ • λ³€κ²½ 감지(dirty checking)
β—¦
μŠ€λƒ…μƒ·μœΌλ‘œ λ³€κ²½ 감지

flush

β€’
PC λ₯Ό λΉ„μš°λŠ” 것이 μ•„λ‹˜
β€’
PC 의 λ³€κ²½ λ‚΄μš©μ„ DB 에 λ™κΈ°ν™”ν•˜λŠ” 것이 λͺ©μ 

detach(entity) vs clear()

β€’
νŠΉμ • μ—”ν„°ν‹°λ§Œ μ€€μ˜μ† μƒνƒœλ‘œ μ „ν™˜
β€’
pc λ₯Ό μ™„μ „νžˆ μ΄ˆκΈ°ν™”

entity 맀핑

β€’
unique λŠ” @column 말고 @table μ΄μš©ν•˜κΈ°!