์๋ฒ ๋๋ ํ์
(๋ณตํฉ ๊ฐ ํ์
) ์ฐ๋ฆฌ๋ ์๋ก์ด ๊ฐ ํ์
์ ์ง์ ์ ์ํด์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค. public Class Address { private String city; private String street; private String zipcode; } city์ street, zipcode๋ฅผ ๊ฐ์ง๋ Address๋ ํด๋์ค๋ฅผ ๋ง๋ค์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด๋ ์ํฐํฐ๋ก ์ฌ์ฉํ ๋ชฉ์ ์ด ์๋ ๊ฐ ํ์
์ผ๋ก ์ฌ์ฉํ๊ธฐ ์ํด ๋ง๋ ๊ฒ์
๋๋ค. ์ด๋ฅผ JPA์์๋ ์๋ฒ ๋๋ ํ์
์ด๋ผ๊ณ ๋ถ๋ฅด๋ฉฐ, ์๋ฒ ๋๋ ํ์
๋ int, String๊ณผ ๊ฐ์ ๊ฐ ํ์
์
๋๋ค. @Embedded & @Embeddable ์๋ฒ ๋๋ ํ์
์ ํ๋๋ก ์ฌ์ฉํ๋ ค๋ฉด ํ๋ ์์ @Embedded๋ฅผ ๋ถ์
๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฐ ํ์
์ผ๋ก ์ฌ์ฉ๋๋ ..
๐๏ธ Spring/JPA
@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์๋ ๋ฐฉํฅ์ ๊ฐ๋
์ด ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ฐ์ฒด์ ๊ฒฝ์ฐ, ์ฐธ์กฐ์ฉ ํ๋๋ฅผ ๊ฐ์ง๊ณ ์๋ ๊ฐ์ฒด๋ง ์ฐ๊ด๋ ๊ฐ์ฒด๋ฅผ ์กฐํํ ์ ์์ผ๋ฏ๋ก ๋ฐฉํฅ์ ๊ฐ๋
์ด ์กด์ฌํฉ๋๋ค. ๊ฐ์ฒด ๊ด๊ณ์์ ํ ์ชฝ๋ง ๋ฐ..
์ฐ๊ด๊ด๊ณ ํธ์ ๋ฉ์๋๋ฅผ ์์ฑํ ๋, ๋ฌธ์ ๊ฐ ๋๋ ์ํฉ๊ณผ ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ๋ฐฉ๋ฒ๋ค์ ์ดํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค. ๋ฌธ์ ๊ฐ ๋๋ ์ฝ๋ public class Member { private Team team; public void setTeam(Team team){ this.team = team; team.getMembers().add(this); } } ์์ setTeam() ๋ฉ์๋๋ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ๊ทธ๋ฆผ์ ๋ณด๋ฉด ์ ์ ์๋ฏ์ด, setTeam(teamA) ์ดํ setTeam(teamB)๋ฅผ ํ๊ฒ ๋๋ฉด teamA์์ ๊ด๊ณ๊ฐ ์ญ์ ๋์ง ์์ ์ฒด ๋จ์์๊ฒ ๋ฉ๋๋ค. ์ฝ๋ ์์ public class Member { private Team team; public void setTeam(Team team){ if(this.t..
@JoinColumn ์ธ๋ ํค๋ฅผ ๋งคํํ ๋ ์ฌ์ฉํฉ๋๋ค. name ์์ฑ์๋ ๋งคํํ ์ธ๋ ํค ์ปฌ๋ผ๋ช
(์ด๋ฆ)์ ์ง์ ํฉ๋๋ค. ์์ฑ ๊ธฐ๋ฅ ๊ธฐ๋ณธ๊ฐ name ๋งคํํ ์ธ๋ ํค ์ปฌ๋ผ๋ช
ํ๋๋ช
_[์ฐธ์กฐํ๋ ํ
์ด๋ธ์ ๊ธฐ๋ณธ ํค ์ปฌ๋ผ๋ช
] referencedColumnName ์ธ๋ ํค๊ฐ ์ฐธ์กฐํ๋ ๋์ ํ
์ด๋ธ์ ์ปฌ๋ผ๋ช
์ฐธ์กฐํ๋ ํ
์ด๋ธ์ ๊ธฐ๋ณธ ํค ์ปฌ๋ผ๋ช
foreignKey (DDL) ์ธ๋ ํค ์ ์ฝ์กฐ๊ฑด์ ์ง์ ์ง์ ํ ๋ ์ฌ์ฉํ๋ฉฐ, ํ
์ด๋ธ์ ์์ฑํ ๋๋ง ์ฌ์ฉํ๋ค. unique nullable insertable updatable columnDefinition table @Column์ ์์ฑ๊ณผ ๋์ผํ๋ค. name๊ณผ referencedColumnName์ ์ฐฉ๊ฐํ์ง ์๋๋ก ์ฃผ์ํ์ name์ ๋จ์ง ๋งคํํ ์ธ๋ ํค์ ์ด๋ฆ, ์ฆ ๋จ์ํ ์ปฌ๋ผ๋ช
์ ..
๋ค์๊ณผ ๊ฐ์ ์ฝ๋๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค. @SequenceGenerator( name = "BOARD_SEQ_GENERATOR", allocationSize = 50 ) public class Member { @Id @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "BOARD_SEQ_GENERATOR") @Column(name = "MEMBER_ID") private Long id; } ์ดํ ๋ค์ ์ฝ๋๋ฅผ ์คํํฉ๋๋ค. Member member = new Member(); em.persist(member); Member member2 = new Member(); em.persist(member2); ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ์ด ์ํ์ค ํธ์ถ์ด 2๋ฒ ์ด๋ฃจ์ด์ง๋ค..
DB ๊ธฐ๋ณธ ํค(Primary Key) ์กฐ๊ฑด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ธฐ๋ณธ ํค(Primary Key)๋ ๋ค์ 3๊ฐ์ง ์กฐ๊ฑด์ ๋ชจ๋ ๋ง์กฑํด์ผ ํฉ๋๋ค. null ๊ฐ์ ํ์ฉํ์ง ์์ต๋๋ค. ์ ์ผํด์ผ ํฉ๋๋ค ๋ณํด์๋ ์๋ฉ๋๋ค. ๊ธฐ๋ณธ ํค ์ ํ ์ ๋ต ์์ฐ ํค ๋น์ฆ๋์ค์ ์ผ๋ก ์๋ฏธ๊ฐ ์๋ ํค๋ฅผ ์๋ฏธํฉ๋๋ค. (์: ์ฃผ๋ฏผ๋ฒํธ, ์ ํ๋ฒํธ ๋ฑ) ๋๋ฆฌ ํค ๋น์ฆ๋์ค์ ๊ด๋ จ ์๋ ์์๋ก ๋ง๋ค์ด์ง ํค. (์ : AUTO_INCREMENT, ์ค๋ผํด ์ํ์ค ๋ฑ) ๊ถ์ฅํ๋ ์๋ณ์ ์ ํ ์ ๋ต ์์ฐ ํค๋ณด๋ค๋ ๋๋ฆฌ ํค๋ฅผ ๊ถ์ฅํฉ๋๋ค. ์ฃผ๋ฏผ๋ฑ๋ก ๋ฒํธ๊ฐ์ด ๊ธฐ๋ณธ ํค์ ์กฐ๊ฑด์ ๋ชจ๋ ๋ง์กฑํ๋ ์์ฐ ํค๋ฅผ ๊ธฐ๋ณธ ํค๋ก ์ฌ์ฉํ๊ณ ์ถ๋ค๋ ์ถฉ๋์ด ๋ค ์ ์์ต๋๋ค.. ๊ทธ๋ฌ๋ ๊ฐ์๊ธฐ ์ ์ฑ
์ ๋ณ๊ฒฝ์ผ๋ก, ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฃผ๋ฏผ๋ฒํธ๋ฅผ ์ ์ฅํ์ง ๋ชปํ๊ฒ ๋ง์๋ฒ๋ฆฐ๋ค๋ฉด ๋ต์ด ์์ด์ง๋๋ค. ๋น์ฆ๋์ค ํ..