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..
Spring/Spring JPA ๊ธฐ๋ณธ
2023.02.28
@MappedSuperclass ์์๋ฐ๋ ๊ฒ์ ์๋ , ํ
์ด๋ธ๊ณผ ๋งคํํ๋ ๊ฒ์ด ์๋ ๊ณตํต ์์ฑ(๋งคํ ์ ๋ณด)๋ง ์ ๊ณตํ ๋ ์ฌ์ฉํ๋ค. @MappedSuperclass public abstract class BaseEntity { private String createdBy; private LocalDateTime createDate; private String lastModifiedBy; private LocalDateTime lastModifiedDate; } ์ง์ ์์ฑํด์ ์ฌ์ฉํ ์ผ์ด ์์ผ๋ฏ๋ก ์ถ์ ํด๋์ค๋ก ๋ง๋ค์ public class Member extends BaseEntity ๋ถ๋ชจ ํด๋์ค๋ฅผ ์์ ๋ฐ๋ ์์ ํด๋์ค์ ๋งคํ ์ ๋ณด๋ง ์ ๊ณตํ๋ค. ์กฐํ, ๊ฒ์์ด ๋ถ๊ฐํ๋ค ( em.find(BaseEntity..
Spring/Spring JPA ๊ธฐ๋ณธ
2023.02.28
์์๊ด๊ณ ๋งคํ ์์๊ด๊ณ ๋งคํ์ด๋ , ๊ฐ์ฒด์ ์์ ๊ตฌ์กฐ์ DB์ ์ํผํ์
์๋ธํ์
๊ด๊ณ๋ฅผ ๋งคํํ๋ ๊ฒ์ด๋ค . ๊ฐ์ฒด ์์ ๊ตฌ์กฐ ๊ฐ์ฒด์๋ ์์๊ด๊ณ๊ฐ ์๋ค . ์ํผํ์
-์๋ธํ์
๋
ผ๋ฆฌ ๋ชจ๋ธ ํ์ง๋ง ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์์ ๊ด๊ณ๊ฐ ์๋ค. ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์๋ ์ํผํ์
,์๋ธํ์
๊ด๊ณ๋ผ๋ ๋ชจ๋ธ๋ง ๊ธฐ๋ฒ์ด ๊ฐ์ฒด ์์๊ณผ ์ ์ฌํ๋ค. ์ํผํ์
์๋ธํ์
๋
ผ๋ฆฌ ๋ชจ๋ธ์ ์ค์ ๋ฌผ๋ฆฌ ๋ชจ๋ธ๋ก ๊ตฌํํ๋ 3๊ฐ์ง ๋ฐฉ๋ฒ์ด ์๋ค. JOINED , SINGLE_TABLE , TABLE_PER_CLASS @Inheritance ์ด๋
ธํ
์ด์
์ ์ฌ์ฉํ์ฌ ๋ถ๋ชจ ํด๋์ค์์ ์ ๋ต์ ์ ํํ ์ ์๋ค. JOINED ๊ฐ๊ฐ ํ
์ด๋ธ์ ์์ฑํ๊ณ ์กฐํํ ๋๋ join ํ์ฌ ๊ฐ์ ธ์จ๋ค DTYPE : ํ์
์ ๊ตฌ๋ถํ๊ธฐ ์ํ ์ปฌ๋ผ์ด๋ค. @Inheritance(strategy =..