๐ŸŒป JAVA/์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ

10-3) JPQL - ์ค‘๊ธ‰ ๋ฌธ๋ฒ•

2021. 1. 19. 15:12
๋ชฉ์ฐจ
  1. ๋ชฉ์ฐจ
  2. ๊ฒฝ๋กœ ํ‘œํ˜„์‹ (์‹ค๋ฌด์—์„œ ์‚ฌ์šฉ ๊ถŒ์žฅ X)
  3. JPQL -> SQL
๋ฐ˜์‘ํ˜•

์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ๊ธฐ๋ณธํŽธ์„ ๊ณต๋ถ€ํ•˜๋ฉฐ ์ •๋ฆฌํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.

 

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

JPA๋ฅผ ์ฒ˜์Œ ์ ‘ํ•˜๊ฑฐ๋‚˜, ์‹ค๋ฌด์—์„œ JPA๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋งŒ ๊ธฐ๋ณธ ์ด๋ก ์ด ๋ถ€์กฑํ•˜์‹  ๋ถ„๋“ค์ด JPA์˜ ๊ธฐ๋ณธ ์ด๋ก ์„ ํƒ„ํƒ„ํ•˜๊ฒŒ ํ•™์Šตํ•ด์„œ ์ดˆ๋ณด์ž๋„ ์‹ค๋ฌด์—์„œ ์ž์‹ ์žˆ๊ฒŒ JPA๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ดˆ๊ธ‰ ์›น ๊ฐœ๋ฐœ ํ”„๋กœ๊ทธ๏ฟฝ

www.inflearn.com


๋ชฉ์ฐจ

  • ๊ฒฝ๋กœ ํ‘œํ˜„์‹
  • ํŽ˜์น˜ ์กฐ์ธ 1 - ๊ธฐ๋ณธ
  • ํŽ˜์น˜ ์กฐ์ธ 2 - ํ•œ๊ณ„
  • ๋‹คํ˜•์„ฑ ์ฟผ๋ฆฌ
  • ์—”ํ‹ฐํ‹ฐ ์ง์ ‘ ์‚ฌ์šฉ
  • Named ์ฟผ๋ฆฌ
  • ๋ฒŒํฌ ์—ฐ์‚ฐ

 


 

๊ฒฝ๋กœ ํ‘œํ˜„์‹ (์‹ค๋ฌด์—์„œ ์‚ฌ์šฉ ๊ถŒ์žฅ X)

( ๊ฒฝ๋กœ ํ‘œํ˜„์‹์œผ๋กœ ์ธํ•ด ๋ฌต์‹œ์ ์œผ๋กœ SQL ์กฐ์ธ(๋‚ด๋ถ€ ์กฐ์ธ) ๋ฐœ์ƒ) - ๋‚˜์ค‘์— ํฐ ํ˜ผ๋ž€์„ ์ค„ ์ˆ˜ ์žˆ์Œ.

๊ฒฝ๋กœ ํ‘œํ˜„์‹์ด๋ž€ ?

.(์ )์„ ์ฐ์–ด ๊ฐ์ฒด ๊ทธ๋ž˜ํ”„๋ฅผ ํƒ์ƒ‰ํ•˜๋Š” ๊ฒƒ

Member member = new Member();
String name = member.username;	// *

 

์šฉ์–ด ์ •๋ฆฌ

  • ์ƒํƒœ ํ•„๋“œ(state field) : ๋‹จ์ˆœํžˆ ๊ฐ’์„ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ํ•„๋“œ (ex : m.username)
  • ์—ฐ๊ด€ ํ•„๋“œ(association field) : ์—ฐ๊ด€๊ด€๊ณ„๋ฅผ ์œ„ํ•œ ํ•„๋“œ
    • ๋‹จ์ผ ๊ฐ’ ์—ฐ๊ด€ ํ•„๋“œ : @ManyToOne, @OneToOne, ๋Œ€์ƒ์ด ์—”ํ‹ฐํ‹ฐ (ex : m.team)
    • ์ปฌ๋ ‰์…˜ ๊ฐ’ ์—ฐ๊ด€ ํ•„๋“œ : @OneToMany, @ManyToMany, ๋Œ€์ƒ์ด ์ปฌ๋ ‰์…˜ (ex : m.orders)
SELECT m.username -> ์ƒํƒœ ํ•„๋“œ
	FROM Member m
    	join m.team t 	-> ๋‹จ์ผ ๊ฐ’ ์—ฐ๊ด€ ํ•„๋“œ
        join m.orders o -> ์ปฌ๋ ‰์…˜ ๊ฐ’ ์—ฐ๊ด€ ํ•„๋“œ
WhERE t.name = 'ํŒ€A'

 

1. ์ƒํƒœ ํ•„๋“œ

๊ฒฝ๋กœ ํƒ์ƒ‰์˜ ๋ ์ง€์ . ๋” ์ด์ƒ์˜ ํƒ์ƒ‰์€ X ๋ถˆ๊ฐ€

์ƒํƒœ ํ•„๋“œ

select ๋ฅผ ๋‘ ๋ฒˆ ์กฐํšŒ ํ•ด์„œ m.username์„ ๊ฐ€์ ธ์™”๋‹ค.

์‹คํ–‰ ์ฟผ๋ฆฌ

 

2. ๋‹จ์ผ ๊ฐ’ ์—ฐ๊ด€ ๊ฒฝ๋กœ

๋ฌต์‹œ์  ๋‚ด๋ถ€ ์กฐ์ธ์ด ๋ฐœ์ƒ(์„ฑ๋Šฅ์— ํฐ ์ง€์žฅ์„ ์ค€๋‹ค), ํƒ์ƒ‰์€ m.team.name ์ด๋Ÿฐ ์‹์œผ๋กœ ๊ฐ€๋Šฅ. 

๋‹จ์ผ ๊ฐ’ ์—ฐ๊ด€ ๊ฒฝ๋กœ
์‹คํ–‰ ์ฟผ๋ฆฌ

from ์ ˆ์— ๋ณด๋ฉด, member๋ž‘ team์ด๋ž‘ ๋‚ด๋ถ€ ์กฐ์ธ์ด ๋ฐœ์ƒ! ํ•œ ๊ฒƒ์„ ๋ณผ ์ˆ˜๊ฐ€ ์žˆ๋‹ค.

๊ฐ์ฒด ์ž…์žฅ์—์„œ๋Š” .(์ )์„ ์ด์šฉํ•ด ์ ‘๊ทผํ•˜๋ฉด ๋˜์ง€๋งŒ, DB์ž…์žฅ์—์„œ๋Š” join์„ ํ†ตํ•ด ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ์ด๋‹ค. 

๋‚˜์ค‘์— ์‹ค๋ฌด์—์„œ ์„ฑ๋Šฅ ํŠœ๋‹ํ•˜๋Š”๋ฐ ์žˆ์–ด์„œ ์•„์ฃผ ์ง€๋Œ€ํ•œ ์˜ํ–ฅ์„ ์ฃผ๊ฒŒ ๋œ๋‹ค.

 

3. ์ปฌ๋ ‰์…˜ ๊ฐ’ ์—ฐ๊ด€ ๊ฒฝ๋กœ

๋ฌต์‹œ์  ๋‚ด๋ถ€ ์กฐ์ธ์ด ๋ฐœ์ƒํ•œ๋‹ค. ์ปฌ๋ ‰์…˜์€ ๋” ์ด์ƒ์˜ ํƒ์ƒ‰์€ ๋ถˆ๊ฐ€ X, ํ•œ ๊ฐ€์ง€ ๊ฐ€๋Šฅํ•œ ์ ์€ t.members.size ์ปฌ๋ ‰์…˜์˜ ์‚ฌ์ด์ฆˆ ์ •๋„..

FROM ์ ˆ์— ๋ช…์‹œ์  ์กฐ์ธ์„ ํ†ตํ•ด ์–ป์€ ๋ณ„์นญ์œผ๋กœ ํƒ์ƒ‰ ๊ฐ€๋Šฅํ•จ. (์•„๋ž˜ ์ฝ”๋“œ ์ฐธ์กฐ)

์ปฌ๋ ‰์…˜ ๊ฐ’ ์—ฐ๊ด€ ๊ฒฝ๋กœ
์‹คํ–‰ ์ฟผ๋ฆฌ

 

FROM ์ ˆ์—์„œ ๋ช…์‹œ์  ์กฐ์ธ์„ ํ†ตํ•ด ์–ป์€ ๋ณ„์นญ์œผ๋กœ ์ƒํƒœ ํ•„๋“œ ๊ฒฝ๋กœ๋กœ ํƒ์ƒ‰ํ•˜๊ธฐ

FROM ๋ช…์‹œ์  ์กฐ์ธ
์‹คํ–‰ ์ฟผ๋ฆฌ

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ช…์‹œ์ ์œผ๋กœ ๋‚ด๋ถ€ ์กฐ์ธ(inner join)์„ ์‚ฌ์šฉํ•˜๋ฉด ๋‚˜์ค‘์— ์ฟผ๋ฆฌ ํŠœ๋‹ํ•˜๊ธฐ๋„ ์‰ฝ๊ณ , ๋ฌต์‹œ์  ์กฐ์ธ์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด ๋‚˜์ค‘์— ์šด์˜ํ•˜๋Š”๋ฐ ํฐ ์• ๋กœ์‚ฌํ•ญ์„ ์ค„ ์ˆ˜ ์žˆ๋‹ค.

 

๊ฒฐ๋ก  :  ๋ฌต์‹œ์  ์กฐ์ธ์„ ์‚ฌ์šฉํ•˜์ง€ ๋ง์ž.

๊ฒฝ๋กœ ํ‘œํ˜„์‹ ์˜ˆ์ œ

select o.member.team from Order o	-> O

select t.members from Team t		-> O

select t.members.username from Team t 	-> X

select m.username from Team t join t.members m -> O

JPQL -> SQL

1. ์ƒํƒœ ํ•„๋“œ ๊ฒฝ๋กœ ํƒ์ƒ‰

// JPQL
select m.username, m.age from Member m

// SQL
select m.username, m.age from Member m

 

2. ๋‹จ์ผ ๊ฐ’ ์—ฐ๊ด€ ๊ฒฝ๋กœ ํƒ์ƒ‰

// JPQL
select o.member from Order o

// SQL
select m.*
	from Orders o
    	inner join Member m on o.member_id = m.id

 

 

์ •๋ฆฌ

  • ๊ฐ€๊ธ‰์  ๋ฌต์‹œ์  ์กฐ์ธ ๋Œ€์‹ ์— ๋ช…์‹œ์  ์กฐ์ธ ์‚ฌ์šฉ
    • ๋ฌต์‹œ์  ์กฐ์ธ์€ ํ•ญ์ƒ ๋‚ด๋ถ€ ์กฐ์ธ๋ฐ–์— ์•ˆ๋œ๋‹ค.
  • ์กฐ์ธ์€ SQL ํŠœ๋‹์— ์ค‘์š” ํฌ์ธํŠธ์ด๋‹ค.
  • ๊ฒฝ๋กœ ํƒ์ƒ‰์€ ์ฃผ๋กœ SELECT, WHERE ์ ˆ์—์„œ ์‚ฌ์šฉํ•˜์ง€๋งŒ ๋ฌต์‹œ์  ์กฐ์ธ์œผ๋กœ ์ธํ•ด SQL์˜ FROM (JOIN) ์ ˆ์— ์˜ํ–ฅ์„ ์คŒ.
  • ๋ฌต์‹œ์  ์กฐ์ธ์€ ์กฐ์ธ์ด ์ผ์–ด๋‚˜๋Š” ์ƒํ™ฉ์„ ํ•œ๋ˆˆ์— ํŒŒ์•…ํ•˜๊ธฐ ํž˜๋“ค๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉ ๊ธˆ์ง€!

 

๋ฐ˜์‘ํ˜•
์ €์ž‘์žํ‘œ์‹œ
  1. ๋ชฉ์ฐจ
  2. ๊ฒฝ๋กœ ํ‘œํ˜„์‹ (์‹ค๋ฌด์—์„œ ์‚ฌ์šฉ ๊ถŒ์žฅ X)
  3. JPQL -> SQL
'๐ŸŒป JAVA/์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • CascadeType.DELETE, orphanRemoval ์ฐจ์ด์ 
  • LazyInitializationException์ด ๋‚˜๋Š” ์ด์œ  (feat. ํŠธ๋žœ์žญ์…˜)
  • 10-2) JPQL - ๊ธฐ๋ณธ ๋ฌธ๋ฒ•๊ณผ ๊ธฐ๋Šฅ
  • 9-3) ๊ฐ’ ํƒ€์ž… ์ปฌ๋ ‰์…˜
iseunghan
iseunghan
๊พธ์ค€ํ•˜๊ฒŒ ์—ด์‹ฌํžˆ..
iseunghan
iseunghan

๊ณต์ง€์‚ฌํ•ญ

  • ์–ด์ œ๋ณด๋‹ค ๋‚˜์€ ์˜ค๋Š˜์ด ๋˜๊ธฐ ์œ„ํ•ด ๐Ÿ”ฅ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (260)
    • ๐Ÿ’ Spring (14)
      • ๊ฐœ๋… ๋ฐ ์ดํ•ด (2)
      • Spring ํ•ต์‹ฌ ๊ธฐ์ˆ  (24)
      • Spring REST API (8)
      • Spring MVC, DB ์ ‘๊ทผ ๊ธฐ์ˆ  (7)
      • Spring Security (23)
      • Spring in Action (1)
    • ๐ŸŒป JAVA (84)
      • ์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ (20)
      • ์•Œ๊ณ ๋ฆฌ์ฆ˜, ์ž๋ฃŒ๊ตฌ์กฐ (13)
      • ๋””์ž์ธ ํŒจํ„ด (7)
      • ์ •๋ฆฌ์ •๋ฆฌ์ •๋ฆฌ (43)
      • JUnit (1)
    • ๐Ÿ”– Snippets (3)
      • Javascript (3)
    • โš™๏ธ Devops (22)
      • โ› Git (11)
      • ๐Ÿณ Docker (6)
      • ๐Ÿง Linux (3)
      • ๐ŸŒˆ Jenkins (1)
      • ๐Ÿ“ฌ Kafka (1)
    • ๐Ÿ’ฌ ETC.. (4)
      • ๐Ÿ’ป macOS (2)
    • ๐ŸŒง๏ธ ORM (2)
      • JPA (2)
    • ๐Ÿ Python (1)
    • ๐Ÿ“š Databases (15)
      • ์˜ค๋ผํด๋กœ ๋ฐฐ์šฐ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐœ๋ก ๊ณผ ์‹ค์Šต(2ํŒ) (3)
      • RealMySQL 8.0 (8)
    • ๐Ÿ”ฅ Computer Science (5)
      • ๐Ÿ“ก ๋„คํŠธ์›Œํฌ (5)
    • ๐Ÿท๏ธ ํ˜‘์—… (1)
    • ๐Ÿ“œ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ (38)
      • BAEKJOON\์ˆ˜ํ•™ 1, ์ˆ˜ํ•™ 2 (8)
      • BAEKJOON\์žฌ๊ท€ (5)
      • BAEKJOON\๋ธŒ๋ฃจํŠธ ํฌ์Šค (3)
      • BAEKJOON\์ •๋ ฌ (1)
      • BAEKJOON\๋ฐฑํŠธ๋ž˜ํ‚น (5)
      • BAEKJOON\BFS, DFS (6)
      • BAEKJOON\์ด๋ถ„ํƒ์ƒ‰ (1)
      • BAEKJOON\๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ (9)
      • BAEKJOON\๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜ (0)
    • โœจ ISEUNGHAN (1)

์ธ๊ธฐ ๊ธ€

์ตœ๊ทผ ๊ธ€

์ „์ฒด
์˜ค๋Š˜
์–ด์ œ
๋ฐ˜์‘ํ˜•
hELLO ยท Designed By ์ •์ƒ์šฐ.
iseunghan
10-3) JPQL - ์ค‘๊ธ‰ ๋ฌธ๋ฒ•
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”

๊ฐœ์ธ์ •๋ณด

  • ํ‹ฐ์Šคํ† ๋ฆฌ ํ™ˆ
  • ํฌ๋Ÿผ
  • ๋กœ๊ทธ์ธ

๋‹จ์ถ•ํ‚ค

๋‚ด ๋ธ”๋กœ๊ทธ

๋‚ด ๋ธ”๋กœ๊ทธ - ๊ด€๋ฆฌ์ž ํ™ˆ ์ „ํ™˜
Q
Q
์ƒˆ ๊ธ€ ์“ฐ๊ธฐ
W
W

๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๊ธ€

๊ธ€ ์ˆ˜์ • (๊ถŒํ•œ ์žˆ๋Š” ๊ฒฝ์šฐ)
E
E
๋Œ“๊ธ€ ์˜์—ญ์œผ๋กœ ์ด๋™
C
C

๋ชจ๋“  ์˜์—ญ

์ด ํŽ˜์ด์ง€์˜ URL ๋ณต์‚ฌ
S
S
๋งจ ์œ„๋กœ ์ด๋™
T
T
ํ‹ฐ์Šคํ† ๋ฆฌ ํ™ˆ ์ด๋™
H
H
๋‹จ์ถ•ํ‚ค ์•ˆ๋‚ด
Shift + /
โ‡ง + /

* ๋‹จ์ถ•ํ‚ค๋Š” ํ•œ๊ธ€/์˜๋ฌธ ๋Œ€์†Œ๋ฌธ์ž๋กœ ์ด์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ํ‹ฐ์Šคํ† ๋ฆฌ ๊ธฐ๋ณธ ๋„๋ฉ”์ธ์—์„œ๋งŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.