Spring/Spring JPA ๊ธฐ๋ณธ
2023.03.05
JPQL - ํ์น ์กฐ์ธ(fetch join) SQL ์กฐ์ธ ์ข
๋ฅ๊ฐ ์๋ JPQL ์์ ์ฑ๋ฅ ์ต์ ํ๋ฅผ ์ํด ์ ๊ณตํ๋ ๊ธฐ๋ฅ์ด๋ค. ์ฐ๊ด๋ ์ํฐํฐ๋ ์ปฌ๋ ์
์ SQL ํ๋ฒ์ ํจ๊ป ์กฐํํ๋ ๊ธฐ๋ฅ์ด๋ค. ์์) SQL ํ๋ฒ์ ํ์์ ์กฐํํ๋ฉด์ ์ฐ๊ด๋ ํ๋ ํจ๊ป ์กฐํ JPQL select m from Member m join fetch m.team SQL SELECT M.*, T.* FROM MEMBER M INNER JOIN TEAM T ON M.TEAM_ID=T.ID SQL ์ ๋ณด๋ฉด ํ์ ๋ฟ๋ง ์๋๋ผ ํ(T.*)๋ ํจ๊ป select ํ๋ค. ํ์น ์กฐ์ธ์ด ์๋ ๊ทธ๋ฅ ์กฐํํ ๋ String query = "select m from Member m "; List result = em.createQuery(query, Mem..
Spring/Spring JPA ๊ธฐ๋ณธ
2023.03.04
ํ์ด์ง API ๋๋ณด๊ธฐ ํ์ด์ง์ด๋? ํ์ด์ง์ด๋ ํ ํ๋ฉด์์ ๋ณด์ฌ์ฃผ๋ ๋ฐ์ดํฐ์ ๋ฒ์๋ฅผ ๊ฒฐ์ ํ๋ ์ผ๋ จ์ ๋ฐฉ๋ฒ์ ๋งํ๋ค. ํ์ด์ง์ ์ฌ์ฉ์๊ฐ ์ด๋ค ๋ฐ์ดํฐ๋ฅผ ํ์๋ก ํ ๋, ์ ์ฒด ๋ฐ์ดํฐ์ ์ผ๋ถ๋ถ์ ๋ณด์ฌ์ฃผ๋ ๊ฒ์ ๋งํฉ๋๋ค. ์ฐ๋ฆฌ๊ฐ ํํ ์ ํ๋ ์ผ๋ฐ์ ์ธ ์น ๊ฒ์ํ์ด๋ ์กฐํ ํ๋ฉด์ ์๊ฐํ๋ฉด ๋๋ค. ์กฐํ ๋์ ๋ฐ์ดํฐ๊ฐ 10๋ง ๊ฑด์ด๋ผ๋ฉด ํ ํ๋ฉด์์ ๋ชจ๋ ๋ณด์ฌ ์ค ์๋ ์๋ค. ํ ํ๋ฉด์์ ๋ณด์ฌ์ค ์ ์๋ ๋ฒ์๋ฅผ ๊ฒฐ์ ํ๋ ๊ฒ์ด ํ์ด์ง์ด๋ค. JPA ๋ ํ์ด์ง์ ๋ API๋ก ์ถ์ํํ์๋ค. List result = em.createQuery("select m from Member m order by m.age desc", Member.class) .setFirstResult(0) .setMaxResults(10) .getResult..
Spring/Spring JPA ๊ธฐ๋ณธ
2023.03.04
JPQL - ๊ธฐ๋ณธ ๋ฌธ๋ฒ๊ณผ ๊ธฐ๋ฅ ์ํฐํฐ ๊ฐ์ฒด๋ฅผ ๋์์ผ๋ก ์ฟผ๋ฆฌํ๋ ๊ฒ JPQL ์ ๊ฒฐ๊ตญ SQL๋ก ๋ณํ๋๋ค. "select m From Member m where m.age > 18" ์ํฐํฐ์ ์์ฑ์ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ๋ค. ( Member , age ) JPQL ํค์๋๋ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ์ง ์๋๋ค ( SELECT , FROM , where ) JPQL ์ ํ
์ด๋ธ ์ด๋ฆ์ด ์๋ ์ํฐํฐ ์ด๋ฆ์ ์ฌ์ฉํ๋ค. ( Member ) ๋ณ์นญ์ ํ์์ด๋ค. ( Member as m ) as ๋ ์๋ต๊ฐ๋ฅํ๋ค . TypeQuery, Query TypedQuery query1 = em.createQuery("select m from Member m ", Member.class); TypeQuey : ๋ฐํ ํ์
์ด ๋ช
ํํ ๋ ์ฌ์ฉํ๋ค. Qu..
Spring/Spring JPA ๊ธฐ๋ณธ
2023.03.04
๊ฐ์ฒด์งํฅ ์ฟผ๋ฆฌ ์ธ์ด(JPQL) JPA ๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ฉด ์ํฐํฐ ๊ฐ์ฒด๋ฅผ ์ค์ฌ์ผ๋ก ๊ฐ๋ฐํ๊ธฐ ๋๋ฌธ์ ๊ฒ์์ ํ ๋ ํ
์ด๋ธ์ด ์๋ ์ํฐํฐ ๊ฐ์ฒด๋ฅผ ๋์์ผ๋ก ๊ฒ์์ ํ๋ค. ๋ชจ๋ DB ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ฒด๋ก ๋ณํํด์ ๊ฒ์ํ๋ ๊ฒ์ ๋ถ๊ฐ๋ฅํ๋ค. ์ ํ๋ฆฌ์ผ์ด์
์ด ํ์ํ ๋ฐ์ดํฐ๋ง DB์์ ๋ถ๋ฌ์ค๋ ค๋ฉด ๊ฒฐ๊ตญ ๊ฒ์ ์กฐ๊ฑด์ด ํฌํจ๋ SQL์ด ํ์ํ๋ค. JPA๋ SQL ์ ์ถ์ํํ JPQL ์ด๋ผ๋ ๊ฐ์ฒด ์งํฅ ์ฟผ๋ฆฌ ์ธ์ด๋ฅผ ์ ๊ณตํ๋ค. SQL๊ณผ ๋ฌธ๋ฒ์ด ์ ์ฌํ๊ณ SELECT, FROM, WHERE, GROUP BY, HAVING, JOIN ์ง์ํ๋ค. SQL : ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ
์ด๋ธ์ ๋์์ผ๋ก ์ฟผ๋ฆฌ JPQL : ์ํฐํฐ ๊ฐ์ฒด๋ฅผ ๋์์ผ๋ก ์ฟผ๋ฆฌ List result = em.createQuery("select m From Member m where m.nam..
Spring/Spring JPA ๊ธฐ๋ณธ
2023.03.03
์๋ฒ ๋๋ ํ์
ํ์ ์ํฐํฐ๊ฐ ์๋ค. ( ๊ทผ๋ฌด ์์์ผ๊ณผ ๊ทผ๋ฌด ์ข
๋ฃ์ผ ) private LocalDateTime startDate; private LocalDateTime endDate; ( ๋์ , ๋ฒ์ง , ์ฐํธ๋ฒํธ ) private String city; private String street; private String zipcode; ์ด ์ ๋ณด๋ค์ ๊ณตํต์ผ๋ก ์ฌ์ฉํ ์ ์์ง ์์๊น ? ๊ณตํต์ผ๋ก ํด๋์ค ํ์
์ ๋ง๋ค์ด์ ์ด์ฉํ ์ ์์ง ์์๊น? ๊ณตํต์ผ๋ก ๋ฌถ์ด์ , ํด๋์ค๋ก ๋ง๋ค์ด์ ์ด์ฉ ์๋ฒ ๋๋ ํ์
์ฌ์ฉ๋ฒ (๊ธฐ๋ณธ ์์ฑ์๊ฐ ํ์) @Embeddable public class Period { @Embeddable public class Address { @Embeddable : ๊ฐ ํ์
์ ์ ์ํ๋ ๊ณณ์ ํ์ํ..
Spring/Spring JPA ๊ธฐ๋ณธ
2023.03.01
์์์ฑ ์ ์ด CASCADE ํน์ ์ํฐํฐ๋ฅผ ์์ ์ํ๋ก ๋ง๋ค ๋ ์ฐ๊ด๋ ์ํฐํฐ๋ ํจ๊ป ์์ ์ํ๋ก ๋ง๋ค๊ณ ์ถ์ ๋ ์ฌ์ฉํ๋ค . ์) ๋ถ๋ชจ ์ํฐํฐ๋ฅผ ์ ์ฅํ ๋ ์์ ์ํฐํฐ๋ ํจ๊ป ์ ์ฅํ๊ณ ์ถ์๋ ์ฌ์ฉ ์ง๊ธ ํ์ฌ Parent์ child๋ ์๋ฐฉํฅ ์ฐ๊ด๊ด๊ณ๋ก ๋งบ์ด์ง ์ํฉ์
๋๋ค. Parent parent = new Parent(); Child child1 = new Child(); Child child2 = new Child(); parent.addChild(child1); parent.addChild(child2); em.persist(parent); em.persist(child1); em.persist(child2); ์ฌ๊ธฐ์ ์ธ๊ฐ์ง ์ธ์คํด์ค๋ฅผ ๋ชจ๋ ์์ํ ์ํค๊ธฐ ์ํด์๋ em.persist()๋ฅผ 3๋ฒ ํธ์ถํด..
Spring/Spring JPA ๊ธฐ๋ณธ
2023.03.01
์ฆ์ ๋ก๋ฉ๊ณผ ์ง์ฐ ๋ก๋ฉ Member findMember = em.find(Member.class, member.getId()); Member ๋ฅผ ์กฐํํ ๋ Team ๋ ํจ๊ป ์กฐํํด์ผ ํ ๊น? ๋จ์ํ member ์ ๋ณด๋ง ์ฌ์ฉํ๋ ๋น์ฆ๋์ค ๋ก์ง์ด๋ผ๋ฉด member๋ฅผ ์กฐํํ ๋ team ๊น์ง join ํด์ ๊ฐ์ ธ์ค๋ฉด ์ํด์ด๋ค. ๊ทธ๋์ JPA ๋ ์ง์ฐ๋ก๋ฉ์ด๋ผ๋ ์ต์
์ ์ ๊ณตํ๋ค. ์ง์ฐ๋ก๋ฉ (fetch = FetchType.LAZY) @Entity public class Member { @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "team_id") private Team team; team ๊น์ง join ํด์ ๊ฐ์ ธ์ค์ง ์๊ณ member ๋ง ๊ฐ์ ธ์ค๊ณ ์๋ค. ์ด๋ป๊ฒ te..
Spring/Spring JPA ๊ธฐ๋ณธ
2023.03.01
ํ๋ก์ Member๋ฅผ ์กฐํํ ๋ Team๋ ํจ๊ป ์กฐํํด์ผ ํ ๊น? --> ์ค์ ๋ก ํ์ํ ๋น์ฆ๋์ค ๋ก์ง์ ๋ฐ๋ผ ๋ค๋ฅด๋ค. ๋น์ฆ๋์ค ๋ก์ง์์ ํ์ํ์ง ์์ ๋๊ฐ ์๋๋ฐ, ํญ์ Team์ ํจ๊ป ๊ฐ์ ธ์์ ์ฌ์ฉํ ํ์๋ ์๋ค. ๋ญ๋น๊ฐ ๋ฐ์ํ๊ฒ ๋๋ค. JPA๋ ์ด ๋ญ๋น๋ฅผ ํ์ง ์๊ธฐ ์ํด, ์ง์ฐ๋ก๋ฉ๊ณผ ํ๋ก์๋ผ๋ ๊ฐ๋
์ผ๋ก ํด๊ฒฐํ๋ค. ํ๋ก์ ๊ธฐ์ด ์ง์ฐ ๋ก๋ฉ์ ์ดํดํ๋ ค๋ฉด, ํ๋ก์์ ๊ฐ๋
์ ๋ํด์ ๋ช
ํํ๊ฒ ์ดํดํด์ผ ํ๋ค. em.find() vs em.getReference() em.find() : ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ํตํด์ ์ค์ ์ํฐํฐ ๊ฐ์ฒด๋ฅผ ์กฐํํ๋ค. em.getReference() : ๋ฐ์ดํฐ๋ฒ ์ด์ค ์กฐํ๋ฅผ ๋ฏธ๋ฃจ๋ ๊ฐ์ง(ํ๋ก์) ์ํฐํฐ ๊ฐ์ฒด๋ฅผ ์กฐํํ๋ค. DB์ ์ฟผ๋ฆฌ๊ฐ ๋๊ฐ์ง ์๋๋ฐ ๊ฐ์ฒด๊ฐ ์กฐํ๋๋ค ! Member findMember..