Spring JPA Hibernate์์ Entity์ ์์์ ๋ํด ๊ฒ์ํ์ฌ ๊ณต๋ถํ๋ ์ค ์ถ๊ฐ์ ์ผ๋ก ๊ถ๊ธํ ๋ถ๋ถ์ด ์๊ฒจ ์ ๋ฆฌํด๋ณธ๋ค.
@MappedSuperClass
์ฌ๋ฌ ์ํฐํฐ์ ๊ณตํต์ ์ผ๋ก ์ฌ์ฉ๋๋ ํ๋๋ฅผ ์์๋ฐ๊ธฐ ์ํด ์ฌ์ฉํ๋ค. ์ํฐํฐ๋ค์ด ์์๋ฐ์ ์ฌ์ฉํ ํด๋์ค ์์ ์ ์ธํ๊ฒ ๋๋ฉด ํด๋น ํด๋์ค๋ Table๊ณผ ๋งคํ๋์ง ์๊ณ ๋จ์ํ ํ๋๋ฅผ ์์๋ฐ๊ธฐ ์ํ ํด๋์ค๊ฐ ๋๋ค. ์ด ํด๋์ค๋ ์์ฑํด์ ์ฌ์ฉํ ์ผ์ด ์์ผ๋ฏ๋ก ์ถ์ ํด๋์ค ์ ์ธ์ด ๊ถ์ฅ๋๋ค.
@Embeddable (์๋ต ๊ฐ๋ฅํ๋ค! default ์)
์๋ฅผ ๋ค์ด Wardrobe Entity ๋ด์ ํน์ Writer ์ ๋ณด(String memberName, String memberId) ๊ฐ ๋ด๊ธด๋ค๊ณ ํด๋ณด์. ๊ทธ๋ฐ๋ฐ memberName, memberId๋ฅผ ๋ฐ๋ก ๋๋ฉด ํด๋น ์ ๋ณด๊ฐ Writer ์ ๋ณด์ธ์ง ํ๋จํ๊ธฐ ์ด๋ ค์ธ์๋ ์๋ค. ๊ทธ๋ ๋ค๋ฉด Writer๋ผ๋ ํด๋์ค๋ฅผ ์์ฑํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๋ด์ ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ฉด ํ์คํ ๋ณด๊ธฐ์ ์ข์ ๊ฒ์ด๋ค. ์ด๋ Writer๋ผ๋ ํด๋์ค๋ฅผ ์์ฑํ์ฌ @Embeddable ์๋ ธํ ์ด์ ์ ์ ์ธํ๋ฉด Writer๋ผ๋ ํด๋์ค๋ฅผ Entity์ ํฌํจ์ํฌ ์ ์๋ค. Hibernate๋ Writer ๋ด์ ์๋ ํ๋๋ฅผ Table ํ๋๋ก ์ธ์ํ๋ค.
@Embedded
ํน์ DTO์ @Embeddable ํ ๊ฐ์ฒด๋ฅผ ํ๋๋ก ์ถ๊ฐํ์ ๋ ๋ถ์ฌ์ค์ผ ํ๋ ์๋ ธํ ์ด์ ์ด๋ค.
@AttributeOverrides
๋ง์ฝ ์์ฑ์์ ์์ ์๊ฐ ์๋ ๊ฒฝ์ฐ ๋๊ฐ์ด Writer๋ผ๋ ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ค๊ณ ๊ฐ์ ํด๋ณด์. ๊ทธ๋ฌ๋ฉด Entity๋ก ๋ณํ๋์์ ๋ Writer์ ํ๋๋ช ์ด ๋๊ฐ๊ธฐ ๋๋ฌธ์ ํ๋๋ช ์ค๋ณต ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค. ์ด๋ ํ๋ ์ฌ์ ์๋ฅผ ์ํด ์ฌ์ฉํ๋ ๊ฒ์ด @AttributeOverrides์ด๋ค.
@Embedded
@AttributeOverrides({
@AttributeOverride(name="memberName", column=@Column(name="WRITER_NAME")),
@AttributeOverride(name="memberId", column=@Column(name="WRITER_ID"))
})
Writer writer;
๊ตณ์ด Entity์ @Embedded์ @Embeddable์ ์ ์ฉ์์ผ ๊ฐ์ฒด๋ฅผ ํ๋์ ๋ฃ์ด๋์ ํ์๊ฐ ์์๊น? Entity์ ์ข ๋ ์ง๊ด์ ์ธ ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ ๋ฟ๋ง ์๋๋ผ ๊ฐ์ฒด๋ผ๋ ๊ฒ์ ๋จ์ํ ๋ฐ์ดํฐ๋ฅผ ๋ด๋ ๋ฐ๊ตฌ๋๊ฐ ์๋๋ค. ๊ฐ์ฒด ์์ฒด๊ฐ ํ๋์ ๊ฐ์ง๊ณ ์๋ค. @Embeddableํ ๊ฐ์ฒด์ ํ๋(๋ฉ์๋)๋ฅผ ์ถ๊ฐํจ์ผ๋ก์จ ํ์คํ ์ฑ
์ ๋ถ๋ฆฌ๋ฅผ ํ ์ ์์ ๊ฒ์ด๋ค.