«   2022/10   »
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31          
Archives
Today
11
Total
14,025
๊ด€๋ฆฌ ๋ฉ”๋‰ด

๋ชฉ๋ก๊น€์˜ํ•œ JPA (9)

kingsubin

JPA - 8. ๊ฐ์ฒด์ง€ํ–ฅ ์ฟผ๋ฆฌ ์–ธ์–ด (JPQL) - 1

๊ฐ์ฒด ์ง€ํ–ฅ ์ฟผ๋ฆฌ ์–ธ์–ด ์†Œ๊ฐœ - JPQL - JPA Criteria - QueryDSL - ๋„ค์ดํ‹ฐ๋ธŒ SQL - JDBC API ์ง์ ‘ ์‚ฌ์šฉ, MyBatis, SpringJdbcTemplate ๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉ JPQL ์†Œ๊ฐœ - ๊ฐ€์žฅ ๋‹จ์ˆœํ•œ ์กฐํšŒ ๋ฐฉ๋ฒ• - EntityManager.find() - ๊ฐ์ฒด ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰ (a.getB().getC()) - ๋‚˜์ด๊ฐ€ 18์‚ด ์ด์ƒ์ธ ํšŒ์›์„ ๋ชจ๋‘ ๊ฒ€์ƒ‰ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ? JPQL - JPA๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์—”ํ‹ฐํ‹ฐ ๊ฐ์ฒด๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ๊ฐœ๋ฐœ - ๋ฌธ์ œ๋Š” ๊ฒ€์ƒ‰ ๊ฐœ๋ฐœ - ๊ฒ€์ƒ‰์„ ํ•  ๋•Œ๋„ ํ…Œ์ด๋ธ”์ด ์•„๋‹Œ ์—”ํ‹ฐํ‹ฐ ๊ฐ์ฒด๋ฅผ ๋Œ€์ƒ์œผ๋กœ ๊ฒ€์ƒ‰ - ๋ชจ๋“  DB ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•ด์„œ ๊ฒ€์ƒ‰ํ•˜๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅ - ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋งŒ DB์—์„œ ๋ถˆ๋Ÿฌ์˜ค๋ ค๋ฉด ๊ฒฐ๊ตญ ๊ฒ€์ƒ‰ ์กฐ๊ฑด์ด ํฌํ•จ๋œ SQL์ด ํ•„์š” - JPA๋Š” SQL์„..

Java 2020. 7. 29. 14:16
JPA - 7. ๊ฐ’ ํƒ€์ž…

๊ธฐ๋ณธ๊ฐ’ ํƒ€์ž… JPA์˜ ๋ฐ์ดํ„ฐ ํƒ€์ž… ๋ถ„๋ฅ˜ - ์—”ํ‹ฐํ‹ฐ ํƒ€์ž… - @Entity๋กœ ์ •์˜ํ•˜๋Š” ๊ฐ์ฒด - ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€ํ•ด๋„ ์‹๋ณ„์ž๋กœ ์ง€์†ํ•ด์„œ ์ถ”์  ๊ฐ€๋Šฅ - ์˜ˆ) ํšŒ์› ์—”ํ‹ฐํ‹ฐ์˜ ํ‚ค๋‚˜ ๋‚˜์ด ๊ฐ’์„ ๋ณ€๊ฒฝํ•ด๋„ ์‹๋ณ„์ž๋กœ ์ธ์‹ ๊ฐ€๋Šฅ - ๊ฐ’ ํƒ€์ž… - int, Integer, String ์ฒ˜๋Ÿผ ๋‹จ์ˆœํžˆ ๊ฐ’์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์ž๋ฐ” ๊ธฐ๋ณธ - ์‹๋ณ„์ž๊ฐ€ ์—†๊ณ  ๊ฐ’๋งŒ ์žˆ์œผ๋ฏ€๋กœ ๋ณ€๊ฒฝ์‹œ ์ถ”์  ๋ถˆ๊ฐ€ - ์˜ˆ) ์ˆซ์ž 100์„ 200์œผ๋กœ ๋ณ€๊ฒฝํ•˜๋ฉด ์™„์ „ํžˆ ๋‹ค๋ฅธ ๊ฐ’์œผ๋กœ ๋Œ€์ฒด ๊ฐ’ ํƒ€์ž… ๋ถ„๋ฅ˜ - ๊ธฐ๋ณธ๊ฐ’ ํƒ€์ž… - ์ž๋ฐ” ๊ธฐ๋ณธ ํƒ€์ž… (int, double) - ๋ž˜ํผ ํด๋ž˜์Šค (Integer, Long) - String - ์ž„๋ฒ ๋””๋“œ ํƒ€์ž… (embedded type, ๋ณตํ•ฉ ๊ฐ’ ํƒ€์ž…) - ์ปฌ๋ ‰์…˜ ๊ฐ’ ํƒ€์ž… (collection value type) ๊ธฐ๋ณธ๊ฐ’ ํƒ€์ž… - ์˜ˆ) String ..

Java 2020. 7. 27. 19:53
JPA - 1. ์˜์†์„ฑ ๊ด€๋ฆฌ - ๋‚ด๋ถ€ ๋™์ž‘ ๋ฐฉ์‹

JPA์—์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ 2๊ฐ€์ง€ 1. ๊ฐ์ฒด์™€ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋งคํ•‘ํ•˜๊ธฐ 2. ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ - JPA๋ฅผ ์ดํ•ดํ•˜๋Š”๋ฐ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์–ธ์–ด - "์—”ํ‹ฐํ‹ฐ๋ฅผ ์˜๊ตฌ ์ €์žฅํ•˜๋Š” ํ™˜๊ฒฝ" ์ด๋ผ๋Š” ๋œป - EntityManager.persist(entity); ์—”ํ‹ฐํ‹ฐ ๋งค๋‹ˆ์ € ? ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ ? - ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ๋Š” ๋…ผ๋ฆฌ์ ์ธ ๊ฐœ๋… - ๋ˆˆ์— ๋ณด์ด์ง€ ์•Š๋Š”๋‹ค. - ์—”ํ‹ฐํ‹ฐ ๋งค๋‹ˆ์ €๋ฅผ ํ†ตํ•ด์„œ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์— ์ ‘๊ทผ ์—”ํ‹ฐํ‹ฐ์˜ ์ƒ๋ช…์ฃผ๊ธฐ - ๋น„์˜์† (new/ transient) ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์™€ ์ „ํ˜€ ๊ด€๊ณ„๊ฐ€ ์—†๋Š” ์ƒˆ๋กœ์šด ์ƒํƒœ - ์˜์† (managed) ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์— ๊ด€๋ฆฌ๋˜๋Š” ์ƒํƒœ - ์ค€์˜์† (detached) ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์— ์ €์žฅ๋˜์—ˆ๋‹ค๊ฐ€ ๋ถ„๋ฆฌ๋œ ์ƒํƒœ - ์‚ญ์ œ (removed) ์‚ญ์ œ๋œ ์ƒํƒœ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์˜ ์ด์  - 1..

Java 2020. 7. 26. 14:03
JPA - 0. JPA ์†Œ๊ฐœ, DB ์šฉ์–ด ์ •๋ฆฌ

SQL ์ค‘์‹ฌ ๊ฐœ๋ฐœ์˜ ๋ฌธ์ œ์  - ๊ฐ์ฒด๋ฅผ ๊ด€๊ณ„ํ˜• DB์— ๊ด€๋ฆฌ - SQL ์ค‘์‹ฌ์ ์ธ ๊ฐœ๋ฐœ - CRUD ์˜ ๋ฌดํ•œ ๋ฐ˜๋ณต, ์ง€๋ฃจํ•œ ์ฝ”๋“œ - ํŒจ๋Ÿฌ๋‹ค์ž„์˜ ๋ถˆ์ผ์น˜ : ๊ฐ์ฒด vs ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค - ๊ฐ์ฒด๋ฅผ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅ. ๊ฐ์ฒด -> SQL ๋ณ€ํ™˜ -> RDB(SQL) - ๊ฐ์ฒด์™€ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ฐจ์ด 1. ์ƒ์† 2. ์—ฐ๊ด€๊ด€๊ณ„ 3. ๋ฐ์ดํ„ฐ ํƒ€์ž… 4. ๋ฐ์ดํ„ฐ ์‹๋ณ„ ๋ฐฉ๋ฒ• 1. ๊ฐ์ฒด์˜ ๊ฒฝ์šฐ ์ƒ์†์ด ์กด์žฌํ•˜์ง€๋งŒ Table์˜ ๊ฒฝ์šฐ ์ƒ์†์ด ์กด์žฌํ•˜์ง€ ์•Š๊ณ  ๋น„์Šทํ•œ ์Šˆํผํƒ€์ž… ์„œ๋ธŒํƒ€์ž… ๊ด€๊ณ„๊ฐ€ ์กด์žฌํ•œ๋‹ค. -> ์ž๋ฐ” ์ปฌ๋ ‰์…˜์„ ์˜ˆ์‹œ๋กœ ์„ค๋ช… 2. ๊ฐ์ฒด๋Š” ์ฐธ์กฐ๋ฅผ ์‚ฌ์šฉ, ํ…Œ์ด๋ธ”์€ ์™ธ๋ž˜ ํ‚ค๋ฅผ ์‚ฌ์šฉ -> ๊ฐ์ฒด๋Š” ์ž์œ ๋กญ๊ฒŒ ๊ฐ์ฒด ๊ทธ๋ž˜ํ”„๋ฅผ ํƒ์ƒ‰ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค. ๊ฒฐ๊ตญ ๊ฐ์ฒด๋ฅผ ๊ฐ์ฒด๋‹ต๊ฒŒ ๋ชจ๋ธ๋ง ํ•  ์ˆ˜๋ก ๋งคํ•‘ ์ž‘์—…๋งŒ ๋Š˜์–ด๋‚œ๋‹ค. ๊ฐ์ฒด๋ฅผ ์ž๋ฐ” ์ปฌ๋ ‰์…˜์— ..

Java 2020. 7. 26. 13:36
JPA - 4. ๋‹ค์–‘ํ•œ ์—ฐ๊ด€๊ด€๊ณ„ ๋งคํ•‘

์—ฐ๊ด€๊ด€๊ณ„ ๋งคํ•‘์‹œ ๊ณ ๋ ค์‚ฌํ•ญ 3๊ฐ€์ง€ 1. ๋‹ค์ค‘์„ฑ 2. ๋‹จ๋ฐฉํ–ฅ, ์–‘๋ฐฉํ–ฅ 3. ์—ฐ๊ด€๊ด€๊ณ„์˜ ์ฃผ์ธ 1. ๋‹ค์ค‘์„ฑ - ๋‹ค๋Œ€์ผ : @ManyToOne - ์ผ๋Œ€๋‹ค : @OneToMany - ์ผ๋Œ€์ผ : @OneToOne - ๋‹ค๋Œ€๋‹ค : @ManyToMany 2. ๋‹จ๋ฐฉํ–ฅ, ์–‘๋ฐฉํ–ฅ - ํ…Œ์ด๋ธ” - ์™ธ๋ž˜ํ‚ค ํ•˜๋‚˜๋กœ ์–‘์ชฝ ์กฐ์ธ ๊ฐ€๋Šฅ - ์‚ฌ์‹ค ๋ฐฉํ–ฅ์ด๋ผ๋Š” ๊ฐœ๋…์ด ์—†๋‹ค. - ๊ฐ์ฒด - ์ฐธ์กฐ์šฉ ํ•„๋“œ๊ฐ€ ์žˆ๋Š” ์ชฝ์œผ๋กœ๋งŒ ์ฐธ์กฐ ๊ฐ€๋Šฅ - ํ•œ์ชฝ๋งŒ ์ฐธ์กฐํ•˜๋ฉด ๋‹จ๋ฐฉํ–ฅ - ์–‘์ชฝ์ด ์„œ๋กœ ์ฐธ์กฐํ•˜๋ฉด ์–‘๋ฐฉํ–ฅ 3. ์—ฐ๊ด€๊ด€๊ณ„์˜ ์ฃผ์ธ - ํ…Œ์ด๋ธ”์€ ์™ธ๋ž˜ ํ‚ค ํ•˜๋‚˜๋กœ ๋‘ ํ…Œ์ด๋ธ”์ด ์—ฐ๊ด€๊ด€๊ณ„๋ฅผ ๋งบ์Œ - ๊ฐ์ฒด ์–‘๋ฐฉํ–ฅ ๊ด€๊ณ„๋Š” A -> B , B -> A ์ฒ˜๋Ÿผ ์ฐธ์กฐ๊ฐ€ 2๊ตฐ๋ฐ - ๊ฐ์ฒด ์–‘๋ฐฉํ–ฅ ๊ด€๊ณ„๋Š” ์ฐธ์กฐ๊ฐ€ 2๊ตฐ๋ฐ ์žˆ๋‹ค. ๋‘˜ ์ค‘ ํ…Œ์ด๋ธ”์˜ ์™ธ๋ž˜ ํ‚ค๋ฅผ ๊ด€๋ฆฌํ•  ๊ณณ์„ ์ง€์ •ํ•ด์•ผ ํ•œ๋‹ค. - ์—ฐ๊ด€๊ด€๊ณ„์˜ ..

Java 2020. 7. 25. 18:16
JPA - 6. ํ”„๋ก์‹œ์™€ ์—ฐ๊ด€๊ด€๊ณ„ ๊ด€๋ฆฌ

ํ”„๋ก์‹œ ํ”„๋ก์‹œ ๊ธฐ์ดˆ - em.find() vs em.getReference() - em.find() : ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ํ†ตํ•ด์„œ ์‹ค์ œ ์—”ํ‹ฐํ‹ฐ ๊ฐ์ฒด ์กฐํšŒ - em.getReference() : ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์กฐํšŒ๋ฅผ ๋ฏธ๋ฃจ๋Š” ๊ฐ€์งœ(ํ”„๋ก์‹œ) ์—”ํ‹ฐํ‹ฐ ๊ฐ์ฒด ์กฐํšŒ ํ”„๋ก์‹œ ํŠน์ง• - ์‹ค์ œ ํด๋ž˜์Šค๋ฅผ ์ƒ์† ๋ฐ›์•„์„œ ๋งŒ๋“ค์–ด์ง„๋‹ค. - ์‹ค์ œ ํด๋ž˜์Šค์™€ ๊ฒ‰ ๋ชจ์–‘์ด ๊ฐ™๋‹ค. - ์‚ฌ์šฉํ•˜๋Š” ์ž…์žฅ์—์„œ๋Š” ์ง„์งœ ๊ฐ์ฒด์ธ์ง€ ํ”„๋ก์‹œ ๊ฐ์ฒด์ธ์ง€ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š๊ณ  ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค. (์ด๋ก ์ƒ์œผ๋กœ) - ํ”„๋ก์‹œ ๊ฐ์ฒด๋Š” ์‹ค์ œ ๊ฐ์ฒด์˜ ์ฐธ์กฐ(target)์„ ๋ณด๊ด€ํ•œ๋‹ค. - ํ”„๋ก์‹œ ๊ฐ์ฒด๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ํ”„๋ก์‹œ ๊ฐ์ฒด๋Š” ์‹ค์ œ ๊ฐ์ฒด์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค. - ํ”„๋ก์‹œ ๊ฐ์ฒด๋Š” ์ฒ˜์Œ ์‚ฌ์šฉํ•  ๋•Œ ํ•œ ๋ฒˆ๋งŒ ์ดˆ๊ธฐํ™” - ํ”„๋ก์‹œ ๊ฐ์ฒด๋ฅผ ์ดˆ๊ธฐํ™” ํ•  ๋•Œ, ํ”„๋ก์‹œ ๊ฐ์ฒด๊ฐ€ ์‹ค์ œ ์—”ํ‹ฐํ‹ฐ๋กœ ๋ฐ”๋€Œ๋Š” ๊ฒƒ์€ ์•„๋‹˜. ์ดˆ๊ธฐํ™” ..

Java 2020. 7. 25. 16:48