๐ป JAVA/์๋ฐ ORM ํ์ค JPA ํ๋ก๊ทธ๋๋ฐ
2024.04.18
๋ค์ด๊ฐ๊ธฐ ์ ์ด์ ์๊ฐ์ ์์๋ดค๋ N+1 ํด๊ฒฐ๋ฒ์ ์ด์ด์ FetchJoin์ ์ด์ฉํด์ ํด๊ฒฐํ ์ ์์์ต๋๋ค. ํ์ง๋ง Fetch Join์ด๋ผ๊ณ ๋ค ํด๊ฒฐํ ์ ์๋ ๊ฒ์ ์๋๋๋ค. ์ด๋ฒ ์๊ฐ์๋ Fetch Join์ ์ฌ์ฉํ์ ๋ ์ด๋ ํ ์ฌ์ด๋ ์ดํํธ๊ฐ ์๋์ง ์์๋ณด๊ณ ๊ทธ ํด๊ฒฐ์ฑ
์ ๋ํด์ ์์๋ด
๋๋ค. 1. FetchJoin, EntityGraph ์ฌ์ฉ ์ Pagination์ ์ฌ์ฉํ ์ ์๋ค. FetchJoin๊ณผ EntityGraph ๋ ๋ค ๋์ผํ ์ฆ์์ด ๋ฐ์ํฉ๋๋ค. Fetch Join๋ง ํ
์คํธ๋ฅผ ํด๋ณด๊ฒ ์ต๋๋ค. @Query( value = "select t from Team t join fetch t.members", countQuery = "select count(t) from Team t" ) List f..
๐ป JAVA/์๋ฐ ORM ํ์ค JPA ํ๋ก๊ทธ๋๋ฐ
2024.02.27
๐ก ์๋ ์ค์ต์ ์งํํ ๋ชจ๋ ์ฝ๋๋ Github์ ์์ต๋๋ค. JPA N+1์ด๋? ์ค๋ฌด์์ JPA๋ฅผ ์ฌ์ฉํ๋ค๋ณด๋ฉด, N+1 ์ฟผ๋ฆฌ๋ฅผ ๋ง๋๊ฒ ๋ฉ๋๋ค. ์ฌ๊ธฐ์ N+1์ด๋ Team(1) ↔ Member(N) ์ฐ๊ด๊ด๊ณ๊ฐ ์๋ค๊ณ ๊ฐ์ ํ์ ๋, ํ๋์ ํ์ ์กฐํํ์ง๋ง ํ ๋ด๋ถ์ ์๋ ๋ชจ๋ ๋ฉค๋ฒ๋ค์ด ํจ๊ป ์กฐํ๋๋ฉด์ 1+N ๊ฐ์ ์ฟผ๋ฆฌ๊ฐ ๋ฐ์ํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ์ง์ ํ
์คํธ ์ฝ๋๋ฅผ ํตํด ์ด๋ฌํ ์ํฉ๋ค์ ํด๊ฒฐํ ์ ์๋ ๋ฐฉ๋ฒ๋ค์ ์ดํด๋ณด๊ณ ๊ฐ ์ํฉ์ด ๋ ์ด๋ค ์ฌ์ด๋์ดํํธ๊ฐ ์๋์ง๋ ์์๋ณด๊ฒ ์ต๋๋ค. Entity ๋ฐ Repository ์ฝ๋ ์ค์ต์ ์ฌ์ฉ๋ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) @Entity public class Membe..
๐ป JAVA/์๋ฐ ORM ํ์ค JPA ํ๋ก๊ทธ๋๋ฐ
2022.08.04
CascadeType.DELETE, orphanRemoval ์ฐจ์ด์ ๋ชฉํ CASCADE.REMOVE ์ orphanRemoval์ ์ฐจ์ด์ ์ ๋ํด์ ์์๋ณด๊ฒ ์ต๋๋ค. ํ
์คํธ์ฉ ์ํฐํฐ public class Parent { @OneToMany(mappedBy = "parent") private List children = new ArrayList(); } public class Child { @ManyToOne @JoinColumn(name = "PARENT_ID") private Parent parent; } CASCADE.REMOVE @OneToMany(mappedBy = "parent", cascade = CascadeType.REMOVE) private List children = new ArrayLi..
๐ป JAVA/์๋ฐ ORM ํ์ค JPA ํ๋ก๊ทธ๋๋ฐ
2022.03.30
์ฝ๋ ์ ์ฒด ์ฝ๋๋ Github์ ์์ต๋๋ค :) TeamServiceTest @RunWith(SpringRunner.class) @SpringBootTest public class TeamServiceTest { @Autowired private TeamService teamService; @Before public void setup() { Team team = new Team(null, "team", new ArrayList()); for (int i = 1; i t.getMembers().get(0).getName()); } } TeamRepository @Repository public interface TeamRepository extends JpaRepository { } ์ํฉ Serivce๋จ์..
๐ป JAVA/์๋ฐ ORM ํ์ค JPA ํ๋ก๊ทธ๋๋ฐ
2021.01.19
์๋ฐ ORM ํ์ค JPA ํ๋ก๊ทธ๋๋ฐ - ๊ธฐ๋ณธํธ์ ๊ณต๋ถํ๋ฉฐ ์ ๋ฆฌํ ๋ด์ฉ์
๋๋ค. ์๋ฐ ORM ํ์ค JPA ํ๋ก๊ทธ๋๋ฐ - ๊ธฐ๋ณธํธ - ์ธํ๋ฐ JPA๋ฅผ ์ฒ์ ์ ํ๊ฑฐ๋, ์ค๋ฌด์์ JPA๋ฅผ ์ฌ์ฉํ์ง๋ง ๊ธฐ๋ณธ ์ด๋ก ์ด ๋ถ์กฑํ์ ๋ถ๋ค์ด JPA์ ๊ธฐ๋ณธ ์ด๋ก ์ ํํํ๊ฒ ํ์ตํด์ ์ด๋ณด์๋ ์ค๋ฌด์์ ์์ ์๊ฒ JPA๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด๊ธ ์น ๊ฐ๋ฐ ํ๋ก๊ทธ๏ฟฝ www.inflearn.com ๋ชฉ์ฐจ ๊ฒฝ๋ก ํํ์ ํ์น ์กฐ์ธ 1 - ๊ธฐ๋ณธ ํ์น ์กฐ์ธ 2 - ํ๊ณ ๋คํ์ฑ ์ฟผ๋ฆฌ ์ํฐํฐ ์ง์ ์ฌ์ฉ Named ์ฟผ๋ฆฌ ๋ฒํฌ ์ฐ์ฐ ๊ฒฝ๋ก ํํ์ (์ค๋ฌด์์ ์ฌ์ฉ ๊ถ์ฅ X) ( ๊ฒฝ๋ก ํํ์์ผ๋ก ์ธํด ๋ฌต์์ ์ผ๋ก SQL ์กฐ์ธ(๋ด๋ถ ์กฐ์ธ) ๋ฐ์) - ๋์ค์ ํฐ ํผ๋์ ์ค ์ ์์. ๊ฒฝ๋ก ํํ์์ด๋ ? .(์ )์ ์ฐ์ด ๊ฐ์ฒด ๊ทธ๋ํ๋ฅผ ํ์ํ๋ ๊ฒ Member mem..
๐ป JAVA/์๋ฐ ORM ํ์ค JPA ํ๋ก๊ทธ๋๋ฐ
2020.12.29
์๋ฐ ORM ํ์ค JPA ํ๋ก๊ทธ๋๋ฐ - ๊ธฐ๋ณธํธ์ ๊ณต๋ถํ๋ฉฐ ์ ๋ฆฌํ ๋ด์ฉ์
๋๋ค. ์๋ฐ ORM ํ์ค JPA ํ๋ก๊ทธ๋๋ฐ - ๊ธฐ๋ณธํธ - ์ธํ๋ฐ JPA๋ฅผ ์ฒ์ ์ ํ๊ฑฐ๋, ์ค๋ฌด์์ JPA๋ฅผ ์ฌ์ฉํ์ง๋ง ๊ธฐ๋ณธ ์ด๋ก ์ด ๋ถ์กฑํ์ ๋ถ๋ค์ด JPA์ ๊ธฐ๋ณธ ์ด๋ก ์ ํํํ๊ฒ ํ์ตํด์ ์ด๋ณด์๋ ์ค๋ฌด์์ ์์ ์๊ฒ JPA๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด๊ธ ์น ๊ฐ๋ฐ ํ๋ก๊ทธ๏ฟฝ www.inflearn.com ๋ชฉ์ฐจ JPQL ์๊ฐ ํ๋ก์ ์
(SELECT) ํ์ด์ง ์กฐ์ธ ์๋ธ์ฟผ๋ฆฌ JPQL ํ์
ํํ๊ณผ ๊ธฐํ์ ์กฐ๊ฑด์(CASE ๋ฑ๋ฑ) JPQL ํจ์ ๐ JPQL ์๊ฐ JPQL์ ๊ฐ์ฒด์งํฅ ์ฟผ๋ฆฌ ์ธ์ด์ด๋ค. ๋ฐ๋ผ์ ํ
์ด๋ธ์ ๋์์ผ๋ก ์ฟผ๋ฆฌํ๋ ๊ฒ์ด ์๋๋ผ ์ํฐํฐ ๊ฐ์ฒด๋ฅผ ๋์์ผ๋ก ์ฟผ๋ฆฌํ๋ค. JPQL์ SQL์ ์ถ์ํํด์ ํน์ ๋ฐ์ดํฐ๋ฒ ์ด์ค SQL์ ์์กดํ์ง ์๋๋ค. JPQ..