Spring/Spring JPA ๊ธฐ๋ณธ

Spring/Spring JPA ๊ธฐ๋ณธ

[์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ๊ธฐ๋ณธํŽธ] 15. JPQL - ํŽ˜์น˜ ์กฐ์ธ(fetch join)

JPQL - ํŽ˜์น˜ ์กฐ์ธ(fetch join) SQL ์กฐ์ธ ์ข…๋ฅ˜๊ฐ€ ์•„๋‹Œ JPQL ์—์„œ ์„ฑ๋Šฅ ์ตœ์ ํ™”๋ฅผ ์œ„ํ•ด ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์ด๋‹ค. ์—ฐ๊ด€๋œ ์—”ํ‹ฐํ‹ฐ๋‚˜ ์ปฌ๋ ‰์…˜์„ SQL ํ•œ๋ฒˆ์— ํ•จ๊ป˜ ์กฐํšŒํ•˜๋Š” ๊ธฐ๋Šฅ์ด๋‹ค. ์˜ˆ์‹œ) SQL ํ•œ๋ฒˆ์— ํšŒ์›์„ ์กฐํšŒํ•˜๋ฉด์„œ ์—ฐ๊ด€๋œ ํŒ€๋„ ํ•จ๊ป˜ ์กฐํšŒ JPQL select m from Member m join fetch m.team SQL SELECT M.*, T.* FROM MEMBER M INNER JOIN TEAM T ON M.TEAM_ID=T.ID SQL ์„ ๋ณด๋ฉด ํšŒ์› ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํŒ€(T.*)๋„ ํ•จ๊ป˜ select ํ•œ๋‹ค. ํŽ˜์น˜ ์กฐ์ธ์ด ์•„๋‹Œ ๊ทธ๋ƒฅ ์กฐํšŒํ•  ๋•Œ String query = "select m from Member m "; List result = em.createQuery(query, Mem..

Spring/Spring JPA ๊ธฐ๋ณธ

[์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ๊ธฐ๋ณธํŽธ] 14. ํŽ˜์ด์ง• API / ์กฐ์ธ / ์„œ๋ธŒ ์ฟผ๋ฆฌ

ํŽ˜์ด์ง• API ๋”๋ณด๊ธฐ ํŽ˜์ด์ง•์ด๋ž€? ํŽ˜์ด์ง•์ด๋ž€ ํ•œ ํ™”๋ฉด์—์„œ ๋ณด์—ฌ์ฃผ๋Š” ๋ฐ์ดํ„ฐ์˜ ๋ฒ”์œ„๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ์ผ๋ จ์˜ ๋ฐฉ๋ฒ•์„ ๋งํ•œ๋‹ค. ํŽ˜์ด์ง•์€ ์‚ฌ์šฉ์ž๊ฐ€ ์–ด๋–ค ๋ฐ์ดํ„ฐ๋ฅผ ํ•„์š”๋กœ ํ•  ๋•Œ, ์ „์ฒด ๋ฐ์ดํ„ฐ์˜ ์ผ๋ถ€๋ถ„์„ ๋ณด์—ฌ์ฃผ๋Š” ๊ฒƒ์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ํ”ํžˆ ์ ‘ํ•˜๋Š” ์ผ๋ฐ˜์ ์ธ ์›น ๊ฒŒ์‹œํŒ์ด๋‚˜ ์กฐํšŒ ํ™”๋ฉด์„ ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค. ์กฐํšŒ ๋Œ€์ƒ ๋ฐ์ดํ„ฐ๊ฐ€ 10๋งŒ ๊ฑด์ด๋ผ๋ฉด ํ•œ ํ™”๋ฉด์—์„œ ๋ชจ๋‘ ๋ณด์—ฌ ์ค„ ์ˆ˜๋Š” ์—†๋‹ค. ํ•œ ํ™”๋ฉด์—์„œ ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ๋Š” ๋ฒ”์œ„๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๊ฒƒ์ด ํŽ˜์ด์ง•์ด๋‹ค. JPA ๋Š” ํŽ˜์ด์ง•์„ ๋‘ API๋กœ ์ถ”์ƒํ™”ํ•˜์˜€๋‹ค. List result = em.createQuery("select m from Member m order by m.age desc", Member.class) .setFirstResult(0) .setMaxResults(10) .getResult..

Spring/Spring JPA ๊ธฐ๋ณธ

[์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ๊ธฐ๋ณธํŽธ] 13. JPQL ๊ธฐ๋ณธ ๋ฌธ๋ฒ• / ์ฟผ๋ฆฌ API

JPQL - ๊ธฐ๋ณธ ๋ฌธ๋ฒ•๊ณผ ๊ธฐ๋Šฅ ์—”ํ‹ฐํ‹ฐ ๊ฐ์ฒด๋ฅผ ๋Œ€์ƒ์œผ๋กœ ์ฟผ๋ฆฌํ•˜๋Š” ๊ฒƒ JPQL ์€ ๊ฒฐ๊ตญ SQL๋กœ ๋ณ€ํ™˜๋œ๋‹ค. "select m From Member m where m.age > 18" ์—”ํ‹ฐํ‹ฐ์™€ ์†์„ฑ์€ ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•œ๋‹ค. ( Member , age ) JPQL ํ‚ค์›Œ๋“œ๋Š” ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š๋Š”๋‹ค ( SELECT , FROM , where ) JPQL ์€ ํ…Œ์ด๋ธ” ์ด๋ฆ„์ด ์•„๋‹Œ ์—”ํ‹ฐํ‹ฐ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•œ๋‹ค. ( Member ) ๋ณ„์นญ์€ ํ•„์ˆ˜์ด๋‹ค. ( Member as m ) as ๋Š” ์ƒ๋žต๊ฐ€๋Šฅํ•˜๋‹ค . TypeQuery, Query TypedQuery query1 = em.createQuery("select m from Member m ", Member.class); TypeQuey : ๋ฐ˜ํ™˜ ํƒ€์ž…์ด ๋ช…ํ™•ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. Qu..

Spring/Spring JPA ๊ธฐ๋ณธ

[์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ๊ธฐ๋ณธํŽธ] 12. ๊ฐ์ฒด์ง€ํ–ฅ ์ฟผ๋ฆฌ ์–ธ์–ด(JPQL) ์†Œ๊ฐœ

๊ฐ์ฒด์ง€ํ–ฅ ์ฟผ๋ฆฌ ์–ธ์–ด(JPQL) JPA ๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด ์—”ํ‹ฐํ‹ฐ ๊ฐ์ฒด๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ๊ฐœ๋ฐœํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฒ€์ƒ‰์„ ํ• ๋•Œ ํ…Œ์ด๋ธ”์ด ์•„๋‹Œ ์—”ํ‹ฐํ‹ฐ ๊ฐ์ฒด๋ฅผ ๋Œ€์ƒ์œผ๋กœ ๊ฒ€์ƒ‰์„ ํ•œ๋‹ค. ๋ชจ๋“  DB ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•ด์„œ ๊ฒ€์ƒ‰ํ•˜๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋งŒ DB์—์„œ ๋ถˆ๋Ÿฌ์˜ค๋ ค๋ฉด ๊ฒฐ๊ตญ ๊ฒ€์ƒ‰ ์กฐ๊ฑด์ด ํฌํ•จ๋œ SQL์ด ํ•„์š”ํ•˜๋‹ค. JPA๋Š” SQL ์„ ์ถ”์ƒํ™”ํ•œ JPQL ์ด๋ผ๋Š” ๊ฐ์ฒด ์ง€ํ–ฅ ์ฟผ๋ฆฌ ์–ธ์–ด๋ฅผ ์ œ๊ณตํ•œ๋‹ค. SQL๊ณผ ๋ฌธ๋ฒ•์ด ์œ ์‚ฌํ•˜๊ณ  SELECT, FROM, WHERE, GROUP BY, HAVING, JOIN ์ง€์›ํ•œ๋‹ค. SQL : ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ”์„ ๋Œ€์ƒ์œผ๋กœ ์ฟผ๋ฆฌ JPQL : ์—”ํ‹ฐํ‹ฐ ๊ฐ์ฒด๋ฅผ ๋Œ€์ƒ์œผ๋กœ ์ฟผ๋ฆฌ List result = em.createQuery("select m From Member m where m.nam..

Spring/Spring JPA ๊ธฐ๋ณธ

[์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ๊ธฐ๋ณธํŽธ] 11. ์ž„๋ฒ ๋””๋“œ ํƒ€์ž… / ๊ฐ’ ํƒ€์ž…

์ž„๋ฒ ๋””๋“œ ํƒ€์ž… ํšŒ์› ์—”ํ‹ฐํ‹ฐ๊ฐ€ ์žˆ๋‹ค. ( ๊ทผ๋ฌด ์‹œ์ž‘์ผ๊ณผ ๊ทผ๋ฌด ์ข…๋ฃŒ์ผ ) private LocalDateTime startDate; private LocalDateTime endDate; ( ๋„์‹œ , ๋ฒˆ์ง€ , ์šฐํŽธ๋ฒˆํ˜ธ ) private String city; private String street; private String zipcode; ์ด ์ •๋ณด๋“ค์€ ๊ณตํ†ต์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€ ์•Š์„๊นŒ ? ๊ณตํ†ต์œผ๋กœ ํด๋ž˜์Šค ํƒ€์ž…์„ ๋งŒ๋“ค์–ด์„œ ์ด์šฉํ•  ์ˆ˜ ์žˆ์ง€ ์•Š์„๊นŒ? ๊ณตํ†ต์œผ๋กœ ๋ฌถ์–ด์„œ , ํด๋ž˜์Šค๋กœ ๋งŒ๋“ค์–ด์„œ ์ด์šฉ ์ž„๋ฒ ๋””๋“œ ํƒ€์ž… ์‚ฌ์šฉ๋ฒ• (๊ธฐ๋ณธ ์ƒ์„ฑ์ž๊ฐ€ ํ•„์ˆ˜) @Embeddable public class Period { @Embeddable public class Address { @Embeddable : ๊ฐ’ ํƒ€์ž…์„ ์ •์˜ํ•˜๋Š” ๊ณณ์— ํ‘œ์‹œํ•œ..

Spring/Spring JPA ๊ธฐ๋ณธ

[์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ๊ธฐ๋ณธํŽธ] 10. ์˜์†์„ฑ ์ „์ด CASCADE / ๊ณ ์•„ ๊ฐ์ฒด

์˜์†์„ฑ ์ „์ด CASCADE ํŠน์ • ์—”ํ‹ฐํ‹ฐ๋ฅผ ์˜์† ์ƒํƒœ๋กœ ๋งŒ๋“ค ๋•Œ ์—ฐ๊ด€๋œ ์—”ํ‹ฐํ‹ฐ๋„ ํ•จ๊ป˜ ์˜์† ์ƒํƒœ๋กœ ๋งŒ๋“ค๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค . ์˜ˆ) ๋ถ€๋ชจ ์—”ํ‹ฐํ‹ฐ๋ฅผ ์ €์žฅํ•  ๋•Œ ์ž์‹ ์—”ํ‹ฐํ‹ฐ๋„ ํ•จ๊ป˜ ์ €์žฅํ•˜๊ณ  ์‹ถ์„๋•Œ ์‚ฌ์šฉ ์ง€๊ธˆ ํ˜„์žฌ Parent์™€ child๋Š” ์–‘๋ฐฉํ–ฅ ์—ฐ๊ด€๊ด€๊ณ„๋กœ ๋งบ์–ด์ง„ ์ƒํ™ฉ์ž…๋‹ˆ๋‹ค. Parent parent = new Parent(); Child child1 = new Child(); Child child2 = new Child(); parent.addChild(child1); parent.addChild(child2); em.persist(parent); em.persist(child1); em.persist(child2); ์—ฌ๊ธฐ์„œ ์„ธ๊ฐ€์ง€ ์ธ์Šคํ„ด์Šค๋ฅผ ๋ชจ๋‘ ์˜์†ํ™” ์‹œํ‚ค๊ธฐ ์œ„ํ•ด์„œ๋Š” em.persist()๋ฅผ 3๋ฒˆ ํ˜ธ์ถœํ•ด..

Spring/Spring JPA ๊ธฐ๋ณธ

[์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ๊ธฐ๋ณธํŽธ] 9. ์ฆ‰์‹œ ๋กœ๋”ฉ๊ณผ ์ง€์—ฐ ๋กœ๋”ฉ

์ฆ‰์‹œ ๋กœ๋”ฉ๊ณผ ์ง€์—ฐ ๋กœ๋”ฉ Member findMember = em.find(Member.class, member.getId()); Member ๋ฅผ ์กฐํšŒํ•  ๋•Œ Team ๋„ ํ•จ๊ป˜ ์กฐํšŒํ•ด์•ผ ํ• ๊นŒ? ๋‹จ์ˆœํžˆ member ์ •๋ณด๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด๋ผ๋ฉด member๋ฅผ ์กฐํšŒํ•  ๋•Œ team ๊นŒ์ง€ join ํ•ด์„œ ๊ฐ€์ ธ์˜ค๋ฉด ์†ํ•ด์ด๋‹ค. ๊ทธ๋ž˜์„œ JPA ๋Š” ์ง€์—ฐ๋กœ๋”ฉ์ด๋ผ๋Š” ์˜ต์…˜์„ ์ œ๊ณตํ•œ๋‹ค. ์ง€์—ฐ๋กœ๋”ฉ (fetch = FetchType.LAZY) @Entity public class Member { @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "team_id") private Team team; team ๊นŒ์ง€ join ํ•ด์„œ ๊ฐ€์ ธ์˜ค์ง€ ์•Š๊ณ  member ๋งŒ ๊ฐ€์ ธ์˜ค๊ณ  ์žˆ๋‹ค. ์–ด๋–ป๊ฒŒ te..

Spring/Spring JPA ๊ธฐ๋ณธ

[์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ๊ธฐ๋ณธํŽธ] 8. ํ”„๋ก์‹œ

ํ”„๋ก์‹œ Member๋ฅผ ์กฐํšŒํ•  ๋•Œ Team๋„ ํ•จ๊ป˜ ์กฐํšŒํ•ด์•ผ ํ• ๊นŒ? --> ์‹ค์ œ๋กœ ํ•„์š”ํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์— ๋”ฐ๋ผ ๋‹ค๋ฅด๋‹ค. ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์—์„œ ํ•„์š”ํ•˜์ง€ ์•Š์„ ๋•Œ๊ฐ€ ์žˆ๋Š”๋ฐ, ํ•ญ์ƒ Team์„ ํ•จ๊ป˜ ๊ฐ€์ ธ์™€์„œ ์‚ฌ์šฉํ•  ํ•„์š”๋Š” ์—†๋‹ค. ๋‚ญ๋น„๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋œ๋‹ค. JPA๋Š” ์ด ๋‚ญ๋น„๋ฅผ ํ•˜์ง€ ์•Š๊ธฐ ์œ„ํ•ด, ์ง€์—ฐ๋กœ๋”ฉ๊ณผ ํ”„๋ก์‹œ๋ผ๋Š” ๊ฐœ๋…์œผ๋กœ ํ•ด๊ฒฐํ•œ๋‹ค. ํ”„๋ก์‹œ ๊ธฐ์ดˆ ์ง€์—ฐ ๋กœ๋”ฉ์„ ์ดํ•ดํ•˜๋ ค๋ฉด, ํ”„๋ก์‹œ์˜ ๊ฐœ๋…์— ๋Œ€ํ•ด์„œ ๋ช…ํ™•ํ•˜๊ฒŒ ์ดํ•ดํ•ด์•ผ ํ•œ๋‹ค. em.find() vs em.getReference() em.find() : ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ํ†ตํ•ด์„œ ์‹ค์ œ ์—”ํ‹ฐํ‹ฐ ๊ฐ์ฒด๋ฅผ ์กฐํšŒํ•œ๋‹ค. em.getReference() : ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์กฐํšŒ๋ฅผ ๋ฏธ๋ฃจ๋Š” ๊ฐ€์งœ(ํ”„๋ก์‹œ) ์—”ํ‹ฐํ‹ฐ ๊ฐ์ฒด๋ฅผ ์กฐํšŒํ•œ๋‹ค. DB์— ์ฟผ๋ฆฌ๊ฐ€ ๋‚˜๊ฐ€์ง€ ์•Š๋Š”๋ฐ ๊ฐ์ฒด๊ฐ€ ์กฐํšŒ๋œ๋‹ค ! Member findMember..

hello_u
'Spring/Spring JPA ๊ธฐ๋ณธ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก