-
JPA์ Cross Join ๊ฐ์ ํ๊ธฐBack-end/TIL 2022. 4. 20. 09:29
๐ ์ํฉ
์๋ ์์ ์ฝ๋์์ PharmacyEmployee ์ํฐํฐ๋ Pharamcy, PharmacyEmpUser ์ํฐํฐ์ ๊ฐ๊ฐ N:1 ๊ด๊ณ์ด๋ค.
์๋์ ๊ฐ์ด JPQL ์์ฑ์ Join์ ๋ช ์ํ์ง ์์๋ค.
public interface PharmacyEmployeeRepository extends JpaRepository<PharmacyEmployee, Long> { @Query("select pe.id as id, " + "pe.pharmacy.pharmacyName as pharmacyName, " + "pe.pharmacyEmpUser.email as email, " + "pe.pharmacyEmpUser.name as name " + "from PharmacyEmployee pe " + "where pe.pharmacy.id = :pharmacyId") List<PharmEmployeeDspResultDtoVo> findAllByPharmacyId(@Param("pharmacyId") Long pharmacyId); }
โถ๏ธ ์คํ ์ฟผ๋ฆฌ ํ์ธ
์คํ ์ฟผ๋ฆฌ๋ฅผ ํ์ธํด๋ณด๋ ์์ ๊ฐ์ด Pharmacy์ PharmacyEmpUser์ ๋ํด Cross Join์ ํด์ ๊ฐ์ ์กฐํํ๋ค.
์ฆ, PharmacyEmployee์ ๋ฐ์ดํฐ ๊ฐ์ X Pharmacy์ ๋ฐ์ดํฐ ๊ฐ์ X PharmacyEmpUser์ ๋ฐ์ดํฐ ๊ฐ์๋ฅผ ํ ๋ชจ๋ ๊ฒฝ์ฐ์ ๋ํ row์ ์์ฑํ ๋ค, where์ ์ ์กฐ๊ฑด์ ํด๋นํ๋ row๋ง ๋ฐํํ๊ฒ ๋๋ ๊ฒ์ด๋ค. (Cross Join์ด ๋ฌธ์ ๊ฐ ๋๋ ์ด์ )
๐ ์์ธ
- JPQL์ ๋ด๋ถ ๊ตฌํ์ฒด๋ก ์ฌ์ฉํ Hibernate๋ JPQL ์์ฑ์ Join์ ๋ช ์ํ์ง ์์ ์๋ฌต์ ์ธ Join์ ํ ๊ฒฝ์ฐ Cross Join์ ์ฌ์ฉํ๋ค. ๋ฐ๋ผ์ ์์ ๊ฐ์ด Join์ ๋ช ์ํ์ง ์์ ๊ฒฝ์ฐ Cross Join์ ์ํํ ๊ฒ์ด๋ค.
๐ ๊ฐ์
- ๊ธฐ์กด์ ์๋ฌต์ Join ๋์ JPQL ์์ฑ์ Join์ ๋ช ์ํด์ค๋ค.
@Query("select pe.id as id, " + "p.pharmacyName as pharmacyName, " + "peu.email as email, " + "peu.name as name " + "from PharmacyEmployee pe " + "join pe.pharmacy p " + //Join์ ๋ช ์ํจ "join pe.pharmacyEmpUser peu " + //Join์ ๋ช ์ํจ "where p.id = :pharmacyId") List<PharmEmployeeDspResultDtoVo> findAllByPharmacyId(@Param("pharmacyId") Long pharmacyId);
์คํ๋ ์ฟผ๋ฆฌ๋ฅผ ๋ณด๋ฉด Cross Join์ด ์๋ Inner Join์ ์ํํ๋ค.
๐ ์ถ๊ฐ ๊ฐ๋ ์ ๋ฆฌ
Cross Join ์ด๋?
- ์งํฉ์์ ๋์ฌ ์ ์๋ ๋ชจ๋ ๊ฒฝ์ฐ์ด๋ค.
- ์๋ฅผ ๋ค์ด, A ์งํฉ = {a, b}์ B ์งํฉ = {1, 2, 3}์ด๋ฉด, ์ด๋ค์ Cross Join์ AXB๋ก {(a,1), (a,2), (a,3), (b,1), (b,2), (b,3)}์ด ๋๋ค. ๋ชจ๋ ๊ฒฝ์ฐ์ ๋ํด ๋์ค๋ฏ๋ก ์ผ๋ฐ์ ์ธ Join๋ณด๋ค ์ฑ๋ฅ์ ์ด์๊ฐ ๋ฐ์ํ๊ฒ ๋๋ค.
๐ ๊ฐ๋จ ๋๋์
repository ๋จ์ ํ ์คํธ๋ฅผ ์ํํด ์คํ ์ฟผ๋ฆฌ๋ฅผ ํ์ธํ์ง ์์๋ค๋ฉด ๋์น ๋ปํ ๋ด์ฉ์ด์๋ค.
ํ ์คํธ์ ์ค์์ฑ์ ๋ค์ํ๋ฒ ๊นจ๋ซ๊ฒ ๋์๋ค.
๐์ฐธ๊ณ
https://jojoldu.tistory.com/533
'Back-end > TIL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[SpringBatch] ์ ์ฉ ์์, ๊ตฌ์ฑ ๋ฐฉ์ ๊ฐ๋จ ์ ๋ฆฌ (0) 2022.04.26 Spring ๊ฐ๋ฐฉ ํ์์ ์์น์ ๋ฐ์ํ ์ฝ๋ ๋ฆฌํฉํ ๋ง (0) 2022.04.25 API & Response Body ํํ ๊ตฌ์ฑ (0) 2022.04.13 [SpringBoot] JPA Entity์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ Enum ๋งคํ (0) 2022.04.12 [๋ฒ์ธ] ์๋น์ค ์ด์ฉ์ฝ๊ด ์ฒ๋ฆฌ ๋ฐฉ์ (0) 2022.04.12