Querydsl: ๋‘˜ ์ด์ƒ์˜ ์ˆ ์–ด๋ฅผ ํ—ˆ์šฉํ•˜๋„๋ก any() ๋™์ž‘ ํ™•์žฅ

์— ๋งŒ๋“  2014๋…„ 11์›” 07์ผ  ยท  6์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: querydsl/querydsl

๋‚ด๊ฐ€ ์†Œ์Šค ์ฝ”๋“œ์—์„œ ์ถ”๋ก ํ•˜๋Š” ํ•œ any()๋Š” ๋‚˜์ค‘์— ์ง๋ ฌํ™” ์ค‘์— ๋ณ€ํ™˜๋˜๋Š” ํŠน์ • ๊ฒฝ๋กœ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋ฉด
collectionProperty.any().prop1.eq("๊ฐ’1").and(collectionProperty.any().prop2.eq("๊ฐ’2")
์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋‘ ๊ฐœ์˜ ๊ฐœ๋ณ„ ํ•˜์œ„ ์ฟผ๋ฆฌ๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ๊ฒƒ์„ ๋‹ฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ์–ด๋–ค ์‹ ์œผ๋กœ๋“  any() ๋ณ„์นญ์„ ์ง€์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋ฌผ๋ก  JpaSubQuery๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ์—๋Š” ์ •๋ง ์žฅํ™ฉํ•˜๊ณ  ๋ณด๊ธฐ ํ‰ํ•˜๋ฏ€๋กœ ๋” ๊ฐ„๋‹จํ•œ ์ˆ ์–ด๋ฅผ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค.

์šฐ๋ฆฌ์˜ ์‚ฌ์šฉ ์‚ฌ๋ก€์—์„œ ParamS๋กœ ๋งค๊ฐœ๋ณ€์ˆ˜ํ™”๋œ ์ˆ ์–ด๋Š” ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค์—์„œ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ฑ„์šธ ์ˆ˜ ์žˆ๋Š” ํ•„ํ„ฐ ํŒจ๋„์„ ์ƒ์„ฑํ•˜๊ณ  ์ฑ„์›Œ์ง„ ์ˆ ์–ด๋ฅผ ๋ฐฑ์—”๋“œ๋กœ ๋ณด๋‚ธ ๋‹ค์Œ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค(๋ฐฉ๋ฌธ์ž๋ฅผ ๋Œ€์ฒดํ•˜๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด). ์ด๊ฒƒ์€ ์‹คํ–‰ ๋ฐฉ๋ฒ•์— ์ƒ๋Œ€์ ์œผ๋กœ ๋ถˆ๊ฐ€์ง€๋ก ์ ์ธ ์ƒˆ๋กœ์šด ์กฐ๊ฑด์„ ์ถ”๊ฐ€ํ•˜๊ธฐ๊ฐ€ ๋งค์šฐ ์‰ฝ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐœ๋ฐœ์ž์˜ ๊ด€์ ์—์„œ ๋งค์šฐ ์šฐ์•„ํ•ด ๋ณด์ž…๋‹ˆ๋‹ค.
ํ”„๋ก ํŠธ์—”๋“œ์—์„œ ํ•˜์œ„ ์ฟผ๋ฆฌ ์ •์˜๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ์ˆœ๊ฐ„ ์ƒํ™ฉ์ด ์•ฝ๊ฐ„ ์žฅํ™ฉํ•ด ๋ณด์ด๊ธฐ ์‹œ์ž‘ํ•˜๊ณ  ์ด๋ ‡๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ด ์ž˜๋ชป๋˜์—ˆ๋‹ค๊ณ  ๋Š๋‚๋‹ˆ๋‹ค.

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

ใ…)
๋ณ„์นญ = ์ƒˆ๋กœ์šด QEntity("๋ณ„์นญ");
์ˆ ์–ด = collectionProperty.any(๋ณ„์นญ, alias.prop1.eq().and(alias.eq()))
๋น„)
๋ณ„์นญ = ์ƒˆ๋กœ์šด QEntity("๋ณ„์นญ");
collectionProperty.any().as(๋ณ„์นญ)
alias.eq().and(๋ณ„์นญ....)
C) CollectionAnyVisitor์—์„œ ๋™์ž‘์„ ๋ณ€๊ฒฝํ•˜๊ณ  ํ‘œํ˜„์‹ ํ•˜์œ„ ํŠธ๋ฆฌ์—์„œ ์—ฌ๋Ÿฌ ๊ฒฝ๋กœ๋ฅผ ์ถ•์†Œํ•ฉ๋‹ˆ๋‹ค(์œ„ํ—˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด๊ฒƒ์ด any()์™€ ๋ณ‘๋ ฌ๋กœ ์ฝ”๋“œ ์™„์„ฑ์—์„œ ๋‚˜ํƒ€๋‚  ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์ด ๊ฐœ๋ฐœ์ž๋“ค์—๊ฒŒ ๊ฐ€์žฅ ๋ช…๋ฐฑํ•  ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— A ๋ผ์ธ์„ ๋”ฐ๋ผ sth๋ฅผ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ๋ฐฉ๋ฌธ์ž์—์„œ ํ•˜์œ„ ์ฟผ๋ฆฌ์˜ where ์ ˆ์— ์กฐ๊ฑด์„ ๋„ฃ๊ณ  ํ•„์š”ํ•œ ์กฐ์ธ์—์„œ ๋ณ„์นญ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  6 ๋Œ“๊ธ€

์ด๊ฒƒ์ด ์–ด๋–ป๊ฒŒ ๊ตฌ๋ฌธ์ ์œผ๋กœ ์ˆ˜ํ–‰๋  ์ˆ˜ ์žˆ๋Š”์ง€ ์ œ์•ˆ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

ใ…)
๋ณ„์นญ = ์ƒˆ๋กœ์šด QEntity("๋ณ„์นญ");
์ˆ ์–ด = collectionProperty.any(๋ณ„์นญ, alias.prop1.eq().and(alias.eq()))
๋น„)
๋ณ„์นญ = ์ƒˆ๋กœ์šด QEntity("๋ณ„์นญ");
collectionProperty.any().as(๋ณ„์นญ)
alias.eq().and(๋ณ„์นญ....)
C) CollectionAnyVisitor์—์„œ ๋™์ž‘์„ ๋ณ€๊ฒฝํ•˜๊ณ  ํ‘œํ˜„์‹ ํ•˜์œ„ ํŠธ๋ฆฌ์—์„œ ์—ฌ๋Ÿฌ ๊ฒฝ๋กœ๋ฅผ ์ถ•์†Œํ•ฉ๋‹ˆ๋‹ค(์œ„ํ—˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด๊ฒƒ์ด any()์™€ ๋ณ‘๋ ฌ๋กœ ์ฝ”๋“œ ์™„์„ฑ์—์„œ ๋‚˜ํƒ€๋‚  ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์ด ๊ฐœ๋ฐœ์ž๋“ค์—๊ฒŒ ๊ฐ€์žฅ ๋ช…๋ฐฑํ•  ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— A ๋ผ์ธ์„ ๋”ฐ๋ผ sth๋ฅผ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ๋ฐฉ๋ฌธ์ž์—์„œ ํ•˜์œ„ ์ฟผ๋ฆฌ์˜ where ์ ˆ์— ์กฐ๊ฑด์„ ๋„ฃ๊ณ  ํ•„์š”ํ•œ ์กฐ์ธ์—์„œ ๋ณ„์นญ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค.

+1

+1

+1

+1

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰