Statements
JPQL์ select, update, delete statement๋ฅผ ์ง์ํฉ๋๋ค. Kotlin JDSL์ ์ด statement๋ค์ ๋ง๋ค ์ ์๋ DSL์ ์ ๊ณตํฉ๋๋ค.
Select statement
jpql()์์ select()๋ฅผ ํธ์ถํ๋ ๊ฒ์ผ๋ก select statement๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.
val query = jpql {
select(
path(Employee::employeeId),
).from(
entity(Employee::class),
join(Employee::departments),
).where(
type(entity(Employee::class)).eq(FullTimeEmployee::class)
).groupBy(
path(Employee::employeeId),
).having(
count(Employee::employeeId).greaterThan(1L),
).orderBy(
count(Employee::employeeId).desc(),
path(Employee::employeeId).asc(),
)
}Select clause
select statement์ select clause๋ฅผ ๋ง๋ค๊ธฐ ์ํด, select()๋ฅผ ์ด์ฉํ ์ ์์ต๋๋ค. select()๋ Expression์ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ์ ํ๋ก์ ์
์ ํํํฉ๋๋ค. ๋ง์ฝ ํ๋์ Expression๋ง select()์ ๋์ด์จ๋ค๋ฉด ํ์
์ถ๋ก ์ผ๋ก select statement์ ํ์
์ ๊ฒฐ์ ํ์ง๋ง ํ๋ ์ด์์ Expression์ด ๋์ด์จ๋ค๋ฉด ํ์
๋ช
์๊ฐ ํ์ํฉ๋๋ค.
DTO projection
DTO ํด๋์ค์ ํด๋์ค์ ์์ฑ์๋ฅผ selectNew()์ ๋๊ธฐ๋ ๊ฒ์ผ๋ก DTO ํ๋ก์ ์
์ ๋ง๋ค ์ ์์ต๋๋ค.
From clause
select statement์ from clause๋ฅผ ๋ง๋ค๊ธฐ ์ํด, from()์ ์ด์ฉํ ์ ์์ต๋๋ค. from()์ Entity์ Join์ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ์ ์ด๋ค entity๋ฅผ ํตํด ์กฐํ๊ฐ ๋๋์ง ํํํฉ๋๋ค.
Join
์กฐํ๋๋ entity๋ฅผ ์กฐ์ธํ๊ธฐ ์ํด, join()๊ณผ fetchJoin()์ ์ฌ์ฉํ ์ ์์ต๋๋ค. Join์๋ 2์ข
๋ฅ๊ฐ ์์ผ๋ฉฐ ์ผ๋ฐ Join๊ณผ ์ฐ๊ด๊ด๊ณ Join์ด ์์ต๋๋ค. ๋ Join์ ์ฐ๊ด๊ด๊ณ๊ฐ ์๋ entity๋ฅผ ์กฐ์ธํ๋์ง ์๋ entity๋ฅผ ์กฐ์ธํ๋์ง์ ๋ฐ๋ผ ๊ตฌ๋ณ๋ฉ๋๋ค.
join() ์ดํ์ as()๋ฅผ ํธ์ถํ๋ ๊ฒ์ผ๋ก ์กฐ์ธ๋ entity์ alias๋ฅผ ๋ถ๊ฐํ ์ ์์ต๋๋ค. ๋ง์ฝ ๋์ผํ ํ์
์ entity๋ฅผ ์ฌ๋ฌ๊ฐ from clause์ ํฌํจ์ํฌ ๋ ์ด ๊ธฐ๋ฅ์ ์ด์ฉํ ์ ์์ต๋๋ค.
Where clause
select statement์ where clause๋ฅผ ๋ง๋ค๊ธฐ ์ํด, where()๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. where()์ Predicate๋ฅผ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ์ ์กฐํ ๋ฐ์ดํฐ์ ์ ์ฝ์ ํํํฉ๋๋ค. where()์ and()์ ์ถ์ฝ์ด๋ก whereAnd()๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก where()์ or()์ ์ถ์ฝ์ด๋ก whereOr()์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
Group by clause
select statement์ group by clause๋ฅผ ๋ง๋ค๊ธฐ ์ํด, groupBy()๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. `groupBy() ๋ Expression์ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ์ ๋ฐ์ดํฐ์ ๊ทธ๋ฃนํ์ ํํํฉ๋๋ค.
Having clause
select statement์ having clause๋ฅผ ๋ง๋ค๊ธฐ ์ํด, having()์ ์ฌ์ฉํ ์ ์์ต๋๋ค. having()์ Expression์ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ์ ์ถ๊ฐ์ ์ธ ์กฐํ ๋ฐ์ดํฐ์ ์ ์ฝ์ ํํํฉ๋๋ค. having()๊ณผ and()์ ์ถ์ฝ์ด๋ก havingAnd()๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก having()๊ณผ or()์ ์ถ์ฝ์ด๋ก havingOr()์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์งํฉ ์ฐ์ฐ (UNION, UNION ALL, EXCEPT, EXCEPT ALL, INTERSECT, INTERSECT ALL)
UNION, UNION ALL, EXCEPT, EXCEPT ALL, INTERSECT, INTERSECT ALL)Jakarta Persistence 3.2๋ถํฐ JPQL์ ์งํฉ ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ ์ด์์ SELECT ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ๊ฒฐํฉํ๋ ๊ธฐ๋ฅ์ ๊ณต์์ ์ผ๋ก ์ง์ํฉ๋๋ค. Kotlin JDSL์ ์ด๋ฌํ ์๋ก์ด ํ์ค ๊ธฐ๋ฅ์ธ UNION, UNION ALL, EXCEPT, EXCEPT ALL, INTERSECT, INTERSECT ALL ์ฐ์ฐ์ ์ง์ํฉ๋๋ค.
UNION: ๋ ์ฟผ๋ฆฌ์ ๊ฒฐ๊ณผ ์งํฉ์ ๊ฒฐํฉํ๊ณ ์ค๋ณต๋ ํ์ ์ ๊ฑฐํฉ๋๋ค.UNION ALL: ๋ ์ฟผ๋ฆฌ์ ๊ฒฐ๊ณผ ์งํฉ์ ๊ฒฐํฉํ๊ณ ๋ชจ๋ ์ค๋ณต๋ ํ์ ํฌํจํฉ๋๋ค.EXCEPT: ์ฒซ ๋ฒ์งธ ์ฟผ๋ฆฌ์์ ๋ ๋ฒ์งธ ์ฟผ๋ฆฌ์ ์๋ ํ์ ๋ฐํํ๋ฉฐ, ์ค๋ณต์ ์ ๊ฑฐํฉ๋๋ค.EXCEPT ALL: ์ฒซ ๋ฒ์งธ ์ฟผ๋ฆฌ์์ ๋ ๋ฒ์งธ ์ฟผ๋ฆฌ์ ์๋ ํ์ ๋ฐํํ๋ฉฐ, ๋ชจ๋ ์ค๋ณต์ ํฌํจํฉ๋๋ค.INTERSECT: ๋ ๊ฒฐ๊ณผ ์งํฉ ๋ชจ๋์ ์กด์ฌํ๋ ํ๋ง ๋ฐํํ๋ฉฐ, ์ค๋ณต์ ์ ๊ฑฐํฉ๋๋ค.INTERSECT ALL: ๋ ๊ฒฐ๊ณผ ์งํฉ ๋ชจ๋์ ์กด์ฌํ๋ ํ๋ง ๋ฐํํ๋ฉฐ, ๋ชจ๋ ์ค๋ณต์ ํฌํจํฉ๋๋ค.
์งํฉ ์ฐ์ฐ(UNION, UNION ALL, EXCEPT, EXCEPT ALL, INTERSECT, INTERSECT ALL)์ ํฌํจ๋๋ SELECT ๋ฌธ๋ค์ select ๋ชฉ๋ก์ ๋์ผํ ์์ ์ด์ ๊ฐ์ ธ์ผ ํ๋ฉฐ, ํด๋น ์ด์ ๋ฐ์ดํฐ ํ์
์ ์๋ก ํธํ๋์ด์ผ ํฉ๋๋ค.
์ฐ๊ฒฐ๋ Select ์ฟผ๋ฆฌ์ ํจ๊ป ์ฌ์ฉ:
select ์ฟผ๋ฆฌ ๊ตฌ์กฐ(์: select, from, where, groupBy, ๋๋ having ์ ๋ค)์ union(), unionAll(), except(), exceptAll(), intersect(), ๋๋ intersectAll()์ ์ฐ๊ฒฐํ์ฌ ์ฌ์ฉํ ์ ์์ต๋๋ค. orderBy() ์ ์ด ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ, ์งํฉ ์ฐ์ฐ์ ์ต์ข
๊ฒฐ๊ณผ์ ์ ์ฉ๋ฉ๋๋ค.
์ต์์ ๋ ๋ฒจ ์ฐ์ฐ์ผ๋ก ์ฌ์ฉ:
jpql ๋ธ๋ก ๋ด์์ ๋ ๊ฐ์ JpqlQueryable<SelectQuery<T>> ์ธ์คํด์ค๋ฅผ ๊ฒฐํฉํ์ฌ union(), unionAll(), except(), exceptAll(), intersect(), intersectAll()์ ์ต์์ ๋ ๋ฒจ ์ฐ์ฐ์ผ๋ก ์ฌ์ฉํ ์๋ ์์ต๋๋ค.
ORDER BY์ ๋ํ ์ค์ ์ฐธ๊ณ ์ฌํญ:
ORDER BY ์ ์ ์งํฉ ์ฐ์ฐ(UNION, UNION ALL, EXCEPT, EXCEPT ALL, INTERSECT, INTERSECT ALL)์ ์ต์ข
๊ฒฐ๊ณผ ์งํฉ์ ์ ์ฉ๋ฉ๋๋ค. ์งํฉ ์ฐ์ฐ ์์ฒด์ ์ํฅ์ ๋ฏธ์น๋ ๋ฐฉ์์ผ๋ก ์งํฉ ์ฐ์ฐ์ ์ผ๋ถ์ธ ๊ฐ๋ณ SELECT ์ฟผ๋ฆฌ์ ์ ์ฉ๋ ์ ์์ต๋๋ค. (๋ฌผ๋ก , ํ์ ์ฟผ๋ฆฌ๊ฐ ์งํฉ ์ฐ์ฐ ์ ์ ๊ฒฐ๊ณผ๋ฅผ ์ ํํ๋ ๋ฑ์ ๋ค๋ฅธ ๋ชฉ์ ์ผ๋ก ์์ฒด ORDER BY๋ฅผ ๊ฐ์ง ์ ์์ง๋ง, ์ผ๋ฐ์ ์ผ๋ก JPQL์์ ์งํฉ ์ฐ์ฐ๊ณผ ์ต์ข
์ ๋ ฌ์ ์ํด ์ํธ ์์ฉํ๋ ๋ฐฉ์์ ์๋๋๋ค.) ORDER BY ์ ์ ์ ๋ ฌ ๊ธฐ์ค์ ์ผ๋ฐ์ ์ผ๋ก ์ฒซ ๋ฒ์งธ ์ฟผ๋ฆฌ์ SELECT ๋ชฉ๋ก์ ์๋ ์ด์ ๋ณ์นญ ๋๋ ์์น๋ฅผ ์ฐธ์กฐํฉ๋๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค ํธํ์ฑ ์ฐธ๊ณ ์ฌํญ:
์ด๋ฌํ ์งํฉ ์ฐ์ฐ์ JPA 3.2 ์ฌ์์ ์ผ๋ถ์ด์ง๋ง, ๋ชจ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ๋ชจ๋ ์ฐ์ฐ์ ์ง์ํ๋ ๊ฒ์ ์๋๋๋ค. ์๋ฅผ ๋ค์ด:
H2 ๋ฐ์ดํฐ๋ฒ ์ด์ค(๋ฒ์ 1.4.192 - 2.3.232)๋
UNION,UNION ALL,INTERSECT,EXCEPT๋ฅผ ์ง์ํ์ง๋งEXCEPT ALL์ด๋INTERSECT ALL์ ์ง์ํ์ง ์์ต๋๋ค.PostgreSQL, Oracle, SQL Server๋ ์ฌ์ฏ ๊ฐ์ง ์ฐ์ฐ(
UNION,UNION ALL,EXCEPT,EXCEPT ALL,INTERSECT,INTERSECT ALL)์ ๋ชจ๋ ์ง์ํฉ๋๋ค.MySQL์
UNION๊ณผUNION ALL์ ์ง์ํ์ง๋ง ๋ค๋ฅธ ์ฐ์ฐ์์๋ ์ ํ์ด ์์ต๋๋ค:EXCEPT๋ฅผ ์ง์ํ์ง ์์ต๋๋ค. ์ด๋NOT EXISTS๋๋LEFT JOIN์ ์ฌ์ฉํ์ฌ ์๋ฎฌ๋ ์ด์ ํ ์ ์์ต๋๋ค.INTERSECT๋ฅผ ์ง์ํ์ง ์์ต๋๋ค. ์ด๋INNER JOIN๋๋IN์ ์ฌ์ฉํ์ฌ ์๋ฎฌ๋ ์ด์ ํ ์ ์์ต๋๋ค.EXCEPT ALL๋ฐINTERSECT ALL์ ์ง์ํ์ง ์์ผ๋ฉฐ, ๊ฐ๋จํ ๋์ฒด ์ฟผ๋ฆฌ๊ฐ ์์ต๋๋ค.
์ด๋ฌํ ์ฐ์ฐ์ ์ฌ์ฉํ ๋๋ ๋์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์ด๋ฅผ ์ง์ํ๋์ง ํ์ธํ๊ฑฐ๋, ์ง์ํ์ง ์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ํ ๋์ฒด ์ฟผ๋ฆฌ ์ ๋ต์ ์ ๊ณตํด์ผ ํฉ๋๋ค.
Order by clause
select statment์ order by clause๋ฅผ ๋ง๋ค๊ธฐ ์ํด, orderBy()๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. orderBy()๋ Sort๋ฅผ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ์ ๋ฐ์ดํฐ์ ์ ๋ ฌ์ ํํํฉ๋๋ค.
Update statement
jpql()์์ update()๋ฅผ ํธ์ถํ๋ ๊ฒ์ผ๋ก update statement๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.
Update clause
update statment์ update clause๋ฅผ ๋ง๋ค๊ธฐ ์ํด, update()๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. update()๋ Entity๋ฅผ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ์ ์์ ๋ entity๋ฅผ ํํํฉ๋๋ค.
Set clause
update statement์ set clause๋ฅผ ๋ง๋ค๊ธฐ ์ํด, set()์ ์ฌ์ฉํ ์ ์์ต๋๋ค. set()์ Expression์ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ์ ํ ๋น์ ํํํฉ๋๋ค. set()์ ์ฌ๋ฌ๋ฒ ํธ์ถํ๋ ๊ฒ์ผ๋ก ์ฌ๋ฌ ๊ฐ๋ฅผ ํ ๋นํ ์ ์์ต๋๋ค.
Where clause
update statement์ where clause๋ฅผ ๋ง๋ค๊ธฐ ์ํด, where()๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. where()์ Predicate๋ฅผ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ์ ์กฐํ ๋ฐ์ดํฐ์ ์ ์ฝ์ ํํํฉ๋๋ค. where()์ and()์ ์ถ์ฝ์ด๋ก whereAnd()๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก where()์ or()์ ์ถ์ฝ์ด๋ก whereOr()์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
Delete statement
jpql()์์ deleteFrom()๋ฅผ ํธ์ถํ๋ ๊ฒ์ผ๋ก delete statement๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.
Delete from clause
delete statement์ delete clause๋ฅผ ๋ง๋ค๊ธฐ ์ํด, deleteFrom()์ ์ฌ์ฉํ ์ ์์ต๋๋ค. deleteFrom()์ Entity๋ฅผ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ์ ์ญ์ ํ entity๋ฅผ ํํํฉ๋๋ค.
Where clause
delete statement์ where clause๋ฅผ ๋ง๋ค๊ธฐ ์ํด, where()๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. where()์ Predicate๋ฅผ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ์ ์กฐํ ๋ฐ์ดํฐ์ ์ ์ฝ์ ํํํฉ๋๋ค. where()์ and()์ ์ถ์ฝ์ด๋ก whereAnd()๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก where()์ or()์ ์ถ์ฝ์ด๋ก whereOr()์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
Last updated