๐ง ์์์ฑ ์ ์ด(CASCADE) ์ด๋ ํ ์ํฐํฐ๋ฅผ ์์ํ(persist) ํ ๋, ํด๋น ์ํฐํฐ์ ์ฐ๊ด๋ ์ํฐํฐ๋ ํจ๊ป ์์ํํ๊ณ ์ถ์ ๊ฒฝ์ฐ ํด๋น ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. JPA๋ CASCADE ์ต์
์ผ๋ก ์์์ฑ ์ ์ด๋ผ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋๋ฐ, ์ด๋ฆ ๊ทธ๋๋ก ์์์ฑ์ ์ ์ดํ๋ ๊ฒ์
๋๋ค. ์ค๋ช
์ ๋๊ธฐ ์ํด ๊ฐ๋จํ ์์๋ฅผ ๋ง๋ค์ด๋ณด๊ฒ ์ต๋๋ค. @Setter @Getter @Entity public class Parent { @Id @GeneratedValue @Column(name = "PARENT_ID") private Long id; @OneToMany(mappedBy = "parent") private List childList = new ArrayList(); } @Getter @Setter @Entity pu..
๐๏ธ Spring
์ง์ฐ ๋ก๋ฉ๊ณผ ์ฆ์ ๋ก๋ฉ JPA์์๋ ๊ฐ๋ฐ์๊ฐ ์ฐ๊ด๋ ์ํฐํฐ์ ์กฐํ ์์ ์ ์ ํํ ์ ์๋๋ก ๋ค์ ๋๊ฐ์ง ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค. ์ฆ์ ๋ก๋ฉ (EAGER LOADING) @XToX(fetch = FetchType.EAGER) ์ํฐํฐ๋ฅผ ์กฐํํ ๋ ์ฐ๊ด๋ ์ํฐํฐ๋ ํจ๊ป ์กฐํํฉ๋๋ค. ์ง์ฐ ๋ก๋ฉ (LAZY LOADING) @XToX(fetch = FetchType.LAZY) ์ฐ๊ด๋ ์ํฐํฐ๋ฅผ ์ค์ ์ฌ์ฉํ ๋ ์กฐํํฉ๋๋ค. (์ฌ์ฉ ์ ๊น์ง๋ ํ๋ก์๋ก ์กฐํํฉ๋๋ค.) ์ฆ์ ๋ก๋ฉ์ ์ธ๋ถ ์กฐ์ธ(Left Outer Join)์ด ๋ฐ์ํ๋ ์ด์ ์ฆ์ ๋ก๋ฉ์ ์ฌ์ฉํ ๋, ์คํ๋๋ SQL์ด ๋ด๋ถ ์กฐ์ธ(Inner Join)์ด ์คํ๋๋ ๊ฒฝ์ฐ๊ฐ ์๊ณ , ์ธ๋ถ ์กฐ์ธ(Left Outer Join)์ด ์คํ๋๋ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค. ์ด ์ฐจ์ด๊ฐ ๋ฐ์ํ๋ ์ด์ ๋..
์ฐ๊ด๊ด๊ณ๊ฐ ์กด์ฌํ๋ ์ํฐํฐ๋ฅผ ์กฐํ ์, ์ฐ๊ด๋ ์ํฐํฐ๋ก ํจ๊ป ์กฐํํด์์ผ ํ๋์ง์ ๋ํด์ ์๊ฐํด ๋ณด๊ฒ ์ต๋๋ค. ์ฐ๊ด๋ ์ํฐํฐ๋ฅผ ํจ๊ป ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์๋ ํ๋ฒ์ ๊ฐ์ด ์กฐํํ๋ ๊ฒ์ด ์ข์๊ฒ์ด๊ณ , ํจ๊ป ์ฌ์ฉํ๋ ์ผ์ด ๊ฑฐ์ ๋ฐ์ํ์ง ์๋๋ค๋ฉด ์กฐํํ์ง ์๋๊ฒ์ด ์ฑ๋ฅ์ ์ข์ ๊ฒ์
๋๋ค. JPA์์๋ ์์ ๊ฐ์ ์ํฉ๋ค์ ๋๋นํ์ฌ, ์ํฐํฐ๊ฐ ์ค์ ์ฌ์ฉ๋ ๋๊น์ง ๋ฐ์ดํฐ๋ฒ ์ด์ค ์กฐํ๋ฅผ ์ง์ฐํ๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค. ์ด ๋ฐฉ๋ฒ์ ์ง์ฐ ๋ก๋ฉ(lazy loading)์ด๋ผ ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ง์ฐ ๋ก๋ฉ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๊ธฐ ์ํด, ํ๋ก์ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํฉ๋๋ค. EntityManager์ ๋๊ฐ์ง ๋ฉ์๋ ํ๋ก์์ ๋ํด ์์ธํ ์์๋ณด๊ธฐ ์ ์ EntityManger์์ ์ ๊ณตํ๋ ๋๊ฐ์ง ๋ฉ์๋์ ๋ํด ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค. find : ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ํตํด์ ์ค์ ..
@AssocicationOverride @MappedSuperclass๋ฅผ ํตํด ์์ ๋ฐ์ ๊ฒฝ์ฐ๋ @Embedded๋ฅผ ํตํด ์์๋ฐ์ ํ๋ ์ค, ์ฐ๊ด๊ด๊ณ๋ฅผ ์ฌ์ ์ํ์ฌ ์ฌ์ฉํ๊ณ ์ถ์ ๊ฒฝ์ฐ์ ์ฌ์ฉํฉ๋๋ค. @AssocicationOverride ํน์ @AssocicationOverrides๋ฅผ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, ์ฌ์ฉ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. @AssociationOverride(name="๋ถ๋ชจ ํ๋๋ช
", joinColumns=@JoinColumn(name="์ฌ์ ์ํ FK ์ปฌ๋ผ๋ช
")) @MappedSuperclass public class Employee { ... @ManyToOne protected Address address; ... } @Entity @AssociationOverride(name="addr..
์๋ฒ ๋๋ ํ์
(๋ณตํฉ ๊ฐ ํ์
) ์ฐ๋ฆฌ๋ ์๋ก์ด ๊ฐ ํ์
์ ์ง์ ์ ์ํด์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค. public Class Address { private String city; private String street; private String zipcode; } city์ street, zipcode๋ฅผ ๊ฐ์ง๋ Address๋ ํด๋์ค๋ฅผ ๋ง๋ค์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด๋ ์ํฐํฐ๋ก ์ฌ์ฉํ ๋ชฉ์ ์ด ์๋ ๊ฐ ํ์
์ผ๋ก ์ฌ์ฉํ๊ธฐ ์ํด ๋ง๋ ๊ฒ์
๋๋ค. ์ด๋ฅผ JPA์์๋ ์๋ฒ ๋๋ ํ์
์ด๋ผ๊ณ ๋ถ๋ฅด๋ฉฐ, ์๋ฒ ๋๋ ํ์
๋ int, String๊ณผ ๊ฐ์ ๊ฐ ํ์
์
๋๋ค. @Embedded & @Embeddable ์๋ฒ ๋๋ ํ์
์ ํ๋๋ก ์ฌ์ฉํ๋ ค๋ฉด ํ๋ ์์ @Embedded๋ฅผ ๋ถ์
๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฐ ํ์
์ผ๋ก ์ฌ์ฉ๋๋ ..
@MappedSuperclass @MappedSuperclass๋ ์์๊ด๊ณ ๋งคํ๊ณผ๋ ๊ด๋ จ์ด ์์ต๋๋ค. ์ ํํ๋ DB์ ์์๊ด๊ณ ๋งคํ๊ณผ๋ ๊ด๋ จ์ด ์๋ค๊ณ ๋ณด๋ ๊ฒ์ด ์ข ๋ ํท๊ฐ๋ฆฌ์ง ์์ ๊ฒ ๊ฐ์ต๋๋ค. ์๋ฅผ ๋ค์ด ๋ชจ๋ ํด๋์ค๋ ์์ฑ ์๊ฐ(createdDate)๋ผ๋ ์์ฑ์ ๊ฐ์ ธ์ผ ํ๋ค๊ณ ๊ฐ์ ํ๊ฒ ์ต๋๋ค. ๋ชจ๋ ํด๋์ค๋ง๋ค ์ง์ createdDate๋ผ๋ ํ๋๋ฅผ ๋ถ์ฌ์ค ์ ์์ง๋ง, createdDate๋ผ๋ ํ๋๋ฅผ ๊ฐ์ง ์ถ์ ํด๋์ค(ํน์ ์ผ๋ฐ ํด๋์ค)๋ฅผ ๋ง๋ค์ด ์ด๋ฅผ ๋ค๋ฅธ ํด๋์ค๋ค์ด ์์๋ฐ๋๋ก ํ๋ ๊ฒ์ด ์ข ๋ ํจ๊ณผ์ ์
๋๋ค. ์ฆ ์ด๋ ๊ณตํต๋ ํ๋๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํ ์์์ ๋ฐ์ ๊ฒ์ด์ง, ๋ถ๋ชจ์ ์์์ ๊ด๊ณ ํน์ is-a ๊ด๊ณ์ด๊ธฐ ๋๋ฌธ์ ์์์ ๋ฐ์ ๊ฒ์ด ์๋๋๋ค. DB์์์๋ ๋ชจ๋ ํ
์ด๋ธ์ createdDate๊ฐ ๋ค์ด์๋ ๊ตฌ..
๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์๋ ๊ฐ์ฒด์ฒ๋ผ ์์์ด๋ผ๋ ๊ฐ๋
์ด ์์ต๋๋ค. ๊ทธ๋๋ง ์ ์ฌํ ๊ฐ๋
์ผ๋ก๋ ์ํผํ์
์๋ธํ์
๊ด๊ณ๊ฐ ์์ต๋๋ค. JPA์์๋ ๊ฐ์ฒด์ ์์ ๊ตฌ์กฐ๋ฅผ DB์ ์ํผํ์
- ์๋ธํ์
๊ด๊ณ์ ๋งคํ์ํต๋๋ค. ์ํผํ์
์๋ธํ์
๋ชจ๋ธ์ ๊ตฌํ ๋ฐฉ๋ฒ 1. ๊ฐ๊ฐ์ ํ
์ด๋ธ๋ก ๋ณํ : ์กฐ์ธ ํ
์ด๋ธ ๋ถ๋ชจ ํ์
๊ณผ ์์ ํ์
์ ๋ชจ๋ ํ
์ด๋ธ๋ก ๋ง๋ญ๋๋ค. ์ดํ ์์ ํ์
์กฐํ ์ ์กฐ์ธ์ ํตํด ์กฐํํ๋ ๋ฐฉ์์ผ๋ก ์ฌ์ฉํฉ๋๋ค. ์ด๋ JPA์์ ์กฐ์ธ ํ
์ด๋ธ ์ ๋ต์ด๋ผ๊ณ ํฉ๋๋ค. 2. ํตํฉ ํ
์ด๋ธ๋ก ๋ณํ : ์ฑ๊ธ ํ
์ด๋ธ ํ
์ด๋ธ์ ๋จ ํ๋๋ง ๋ง๋ ํ, ํด๋น ํ
์ด๋ธ์ ๋ถ๋ชจ์ ์์ฑ๊ณผ ์์์ ์์ฑ์ ๋ชจ๋ ํฌํจ์์ผ ์ฌ์ฉํฉ๋๋ค. ์ด๋ JPA์์๋ ๋จ์ผ ํ
์ด๋ธ ํน์ ์ฑ๊ธ ํ
์ด๋ธ ์ ๋ต์ด๋ผ๊ณ ํฉ๋๋ค. 3. ์๋ธํ์
ํ
์ด๋ธ๋ก ๋ณํ : ๊ตฌํ ํด๋์ค๋ง๋ค ํ
์ด๋ธ..
์ฐ๊ด๊ด๊ณ๋ฅผ ๋งคํํ ๋๋ ๋ค์์ 3๊ฐ์ง๋ฅผ ๊ณ ๋ คํด์ ๋งคํํ์ฌ์ผ ํฉ๋๋ค. ๋ค์ค์ฑ (์ผ๋ ๋ค, ๋ค๋ ์ผ, ๋ค๋ ๋ค, ์ผ๋ ์ผ) ๋ฐฉํฅ (์๋ฐฉํฅ, ๋จ๋ฐฉํฅ) ์ฐ๊ด๊ด๊ณ์ ์ฃผ์ธ ๐ง ๋ค์ค์ฑ ์ฐ๊ด๊ด๊ณ์๋ ๋ค์๊ณผ ๊ฐ์ ๋ค์ค์ฑ์ด ์์ต๋๋ค. ๋ค๋์ผ(N : 1)[ManyToOne] ์ผ๋๋ค(1 : N)[OneToMany] ์ผ๋์ผ(1 : 1)[OneToOne] ๋ค๋๋ค(N : N)[ManyToMany] ๐ง ๋ฐฉํฅ ๋ฐฉํฅ์๋ ๋จ๋ฐฉํฅ, ์๋ฐฉํฅ์ด ์์ต๋๋ค. DB ํ
์ด๋ธ์ ์ธ๋ ํค(Foreign key)ํ๋๋ก ์กฐ์ธ(Join)์ ์ฌ์ฉํด์ ์๋ฐฉํฅ์ผ๋ก ์ฟผ๋ฆฌ๊ฐ ๊ฐ๋ฅํฉ๋๋ค. ๋ฐ๋ผ์ DB์๋ ๋ฐฉํฅ์ ๊ฐ๋
์ด ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ฐ์ฒด์ ๊ฒฝ์ฐ, ์ฐธ์กฐ์ฉ ํ๋๋ฅผ ๊ฐ์ง๊ณ ์๋ ๊ฐ์ฒด๋ง ์ฐ๊ด๋ ๊ฐ์ฒด๋ฅผ ์กฐํํ ์ ์์ผ๋ฏ๋ก ๋ฐฉํฅ์ ๊ฐ๋
์ด ์กด์ฌํฉ๋๋ค. ๊ฐ์ฒด ๊ด๊ณ์์ ํ ์ชฝ๋ง ๋ฐ..