๋ค๋์ผ์์ ์กฐ์ธ๊ณผ ๊ทธ๋ ์ง ์์ ์ํฉ์์์ ์๋ ์ฐจ์ด
์์ ๊ฐ์ ์์ ์ฝ๋ ์ํฉ์์ Product์ ์
์ฅ์์ findById๋ฅผ ํ๊ฒ ๋๋ฉด @JoinColumn ์ด๋
ธํ
์ด์
์ด ๋ถ์ด์ ์์ฐ์ค๋ฝ๊ฒ joinํ ์ฟผ๋ฆฌ๊ฐ ๋ ๋ผ๊ฐ๊ฒ ๋ฉ๋๋ค.์ผ๋จ ๋จ๊ฑด ์กฐํ๋ฅผ ํ์ค ๋ ๋ค๋์ผ ๊ด๊ณ์์ join ์ฟผ๋ฆฌ๊ฐ ๋ฐ์ํ๋ ์ด์ ๋ @JoinColumn ๋๋ถ์ด ์๋๊ณ @ManyToOne์ ๊ธฐ๋ณธ ๋ก๋ฉ ์ ์ฑ
์ด EAGER์ด๊ธฐ ๋๋ฌธ์
๋๋ค. LAZY๋ก ๋ณ๊ฒฝํด๋ณด์๋ฉด ๊ฒ์ฆํ์ค ์ ์์ต๋๋ค. ์ง๋ฌธํ์ select p from Product p where p.category.name = ?1 ์ ๊ฒฝ์ฐ ์ด๋ ํ ๊ฒฝ์๋ก ์ด๋ฌํ ์ฟผ๋ฆฌ๊ฐ ๋ฐ์ํ์
จ๋ค๋ ๊ฑด์ง ๊ถ๊ธํ๋ค์.๋จผ์ findByCategoryName ๋ฉ์๋ ์ฟผ๋ฆฌ๋ฅผ ํ
์คํธํด๋ณด๋ select ๋ฌธ์ด ํ ๋ฒ ๋ ๋ฐ์ํ๋ ๊ฒ์ผ๋ก ๋ณด์
๋๋ค. ๋ค์ ๋งํด findByCategoryName์ ์ํํ๋ฉด select ๋ฌธ์ category ์ ๋ณด๋ฅผ ํฌํจํ์ง ์๊ณ , EAGER ๋ก๋ฉ์ ์ํด select๊ฐ ํ ๋ฒ ๋ ๋ฐ์ํ๋ค์. ์ค๊ณ๊ฐ ์ข๊ณ ๋์จ์ ๋ ๋์ findByCategoryName์ ์ฌ์ฉํ๋ฉด ์ด๋ฐ ์ํฉ์ด ๋ฐ์ํ๊ณ ์์์ ์๋ ค ๋๋ฆฝ๋๋ค. ๊ทธ๋ฆฌ๊ณ findByCategoryName์ left join์ ๋ฐ์์ํค๋ ๋ฐ๋ฉด์ select p from Product p where p.category.name = ?1 ์ ๊ฒฝ์ฐ ์ง์ ํ
์คํธํด๋ณด์๋ฉด inner join์ด ๋ฐ์ํฉ๋๋ค. ๋ฐ๋ผ์ ์ฐ์ ์ findByCategoryName ๊ธฐ์ค์ผ๋ก ๋น๊ตํ๊ฒ ์ต๋๋ค. findByCategoryName ๋ฐ์ ์ฟผ๋ฆฌ๋ฌธ: select p from Product p left join category c on p.category_id = c.id where c.name ?๋น๊ต์ฉ์ผ๋ก ์ ์ํ์ ์ฟผ๋ฆฌ๋ฌธ : select p from Product p left join category c on p.category_id = c.id where c.name = ?1๊ฒฐ๊ตญ ์์ ํ ๋์ผํ ์ฟผ๋ฆฌ๋ฌธ์
๋๋ค.select p from Product p where p.category.name = ?1์ ์ฟผ๋ฆฌ ๋ฌธ์ผ๋ก ๋น๊ตํ๋ค ํ๋๋ผ๋ inner join์ด๋ผ๋ ์ ์ด ๋ค๋ฅผ ๋ฟ ํฐ ์ฐจ์ด๊ฐ ์์ต๋๋ค.