@MappedSuperClass, @Embedded, @Embeddable

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ํ•œ ๊ฐ์ฒด์— ํ–‰๋™(๋ฉ”์„œ๋“œ)๋ฅผ ์ถ”๊ฐ€ํ•จ์œผ๋กœ์จ ํ™•์‹คํ•œ ์ฑ…์ž„ ๋ถ„๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.