@MappedSuperclass
@MappedSuperclass๋ ์์๊ด๊ณ ๋งคํ๊ณผ๋ ๊ด๋ จ์ด ์์ต๋๋ค.
์ ํํ๋ DB์ ์์๊ด๊ณ ๋งคํ๊ณผ๋ ๊ด๋ จ์ด ์๋ค๊ณ ๋ณด๋ ๊ฒ์ด ์ข ๋ ํท๊ฐ๋ฆฌ์ง ์์ ๊ฒ ๊ฐ์ต๋๋ค.
์๋ฅผ ๋ค์ด ๋ชจ๋ ํด๋์ค๋ ์์ฑ ์๊ฐ(createdDate)๋ผ๋ ์์ฑ์ ๊ฐ์ ธ์ผ ํ๋ค๊ณ ๊ฐ์ ํ๊ฒ ์ต๋๋ค.
๋ชจ๋ ํด๋์ค๋ง๋ค ์ง์  createdDate๋ผ๋ ํ๋๋ฅผ ๋ถ์ฌ์ค ์ ์์ง๋ง, createdDate๋ผ๋ ํ๋๋ฅผ ๊ฐ์ง ์ถ์ ํด๋์ค(ํน์ ์ผ๋ฐ ํด๋์ค)๋ฅผ ๋ง๋ค์ด ์ด๋ฅผ ๋ค๋ฅธ ํด๋์ค๋ค์ด ์์๋ฐ๋๋ก ํ๋ ๊ฒ์ด ์ข ๋ ํจ๊ณผ์ ์ ๋๋ค.
์ฆ ์ด๋ ๊ณตํต๋ ํ๋๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํ ์์์ ๋ฐ์ ๊ฒ์ด์ง, ๋ถ๋ชจ์ ์์์ ๊ด๊ณ ํน์ is-a ๊ด๊ณ์ด๊ธฐ ๋๋ฌธ์ ์์์ ๋ฐ์ ๊ฒ์ด ์๋๋๋ค.
DB์์์๋ ๋ชจ๋ ํ ์ด๋ธ์ createdDate๊ฐ ๋ค์ด์๋ ๊ตฌ์กฐ๋ก ์ค๊ณ๋ ๊ฒ์ ๋๋ค.
@MappedSuperclass๋ ์์ ๊ฐ์ด ๊ณตํต๋ ๋งคํ ์ ๋ณด๊ฐ ํ์ํ ๊ฒฝ์ฐ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์์
๋ชจ๋ ํด๋์ค๋ค์ ๋ค์ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์์ด์ผ ํ๋ค๊ณ ํ๊ฒ ์ต๋๋ค.
- ๋๊ฐ ์์ฑํ๋์ง (createdBy)
 - ์ธ์  ์์ฑ๋์๋์ง (createdDate)
 - ๋๊ฐ ๋ง์ง๋ง์ผ๋ก ์์ ํ์๋์ง (lastModifiedBy)
 - ๋ง์ง๋ง์ผ๋ก ์์ ๋ ๋ ์ง๊ฐ ์ธ์ ์ธ์ง (lastModifiedDate)
 
@MappedSuperclass
public class BaseEntity {
    private String createdBy;
    private LocalDateTime createdDate;
    private String lastModifiedBy;
    private LocalDateTime lastModifiedDate;
}
@Entity
public class Member extends BaseEntity{
    @Id @GeneratedValue
    @Column(name = "MEMBER_ID")
    private Long id;
    private String username;
}
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn//๊ธฐ๋ณธ๊ฐ์ด DTYPE
public class Item extends BaseEntity{
    @Id @GeneratedValue
    @Column(name = "ITEM_ID")
    private Long id;
    private String name;
    private int price;
}
๋ชจ๋ ํด๋์ค์ ์ถ๊ฐํด์ฃผ์ด์ผ ํ ์์ฑ์ BaseEntity๋ก ๋ง๋ค์ด์ ์ด๋ฅผ ์์๋ฐ๋๋ก ํ์์ต๋๋ค.
ํด๋น ์ฝ๋๋ฅผ ์คํํ๋ฉด ์์ฑ๋๋ DB๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.

@MappedSuperclass ์ ๋ฆฌ
- ์์๊ด๊ณ ๋งคํ์ด ์๋๋๋ค.
 - ์ํฐํฐ๊ฐ ์๋๋๋ค.
 - ํ ์ด๋ธ๊ณผ ๋งคํ๋์ง ์์ต๋๋ค.
 - ๋ถ๋ชจ ํด๋์ค๋ ์์๋ฐ๋ ์์ ํด๋์ค์๊ฒ ๋งคํ ์ ๋ณด๋ง ์ ๊ณตํฉ๋๋ค.
 - ์กฐํ, ๊ฒ์์ด ๋ถ๊ฐ๋ฅํฉ๋๋ค.
 - ์ง์  ์์ฑํด์ ์ฌ์ฉํ ์ผ์ด ์์ผ๋ฏ๋ก ์ถ์ ํด๋์ค๋ก ์ฌ์ฉํ๋ ๊ฒ์ ๊ถ์ฅํฉ๋๋ค
 - ํ ์ด๋ธ๊ณผ ๊ด๊ณ ์์ด, ๋จ์ํ ์ํฐํฐ๊ฐ ๊ณตํต์ผ๋ก ์ฌ์ฉํ๋ ๋งคํ ์ ๋ณด๋ฅผ ๋ชจ์ผ๋ ์ญํ ์ ๋๋ค.
 - ์ฃผ๋ก ๋ฑ๋ก์ผ, ์์ ์, ๋ฑ๋ก์, ์์ ์ ๊ฐ์ ์ ์ฒด ์ํฐํฐ์์ ๊ณตํต์ผ๋ก ์ ์ฉํ๋ ์ ๋ณด๋ฅผ ๋ชจ์ ๋ ์ฌ์ฉํฉ๋๋ค.
 - @Entity ํด๋์ค๋ ์ํฐํฐ๋ @MappedSuperclass๋ก ์ง์ ํ ํด๋์ค๋ง ์์์ด ๊ฐ๋ฅํฉ๋๋ค.
 
์ฐธ๊ณ
@Inheritance๋ ๋คํ์ฑ์ ์ํ ์์์
@MappedSuperclass๋ ์ฝ๋ ์ฌ์ฌ์ฉ์ ์ํ ์์์
@Embedded, @Embeddable์ ํฉ์ฑ์ ๊ตฌํํ ๋ ์ฌ์ฉํฉ๋๋ค.
๐ Reference
์๋ฐ ORM ํ์ค JPA ํ๋ก๊ทธ๋๋ฐ - ๊ธฐ๋ณธํธ - ์ธํ๋ฐ | ๊ฐ์
JPA๋ฅผ ์ฒ์ ์ ํ๊ฑฐ๋, ์ค๋ฌด์์ JPA๋ฅผ ์ฌ์ฉํ์ง๋ง ๊ธฐ๋ณธ ์ด๋ก ์ด ๋ถ์กฑํ์ ๋ถ๋ค์ด JPA์ ๊ธฐ๋ณธ ์ด๋ก ์ ํํํ๊ฒ ํ์ตํด์ ์ด๋ณด์๋ ์ค๋ฌด์์ ์์ ์๊ฒ JPA๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค., ๋ณธ ๊ฐ์๋ ์๋ฐ ๋ฐฑ์
www.inflearn.com
[์๋ฐ ORM ํ์ค JPA ํ๋ก๊ทธ๋๋ฐ - ๊น์ํ]
'๐๏ธ Spring > JPA' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [JPA] @AssocicationOverride - ์ฐ๊ด๊ด๊ณ(์ธ๋ ํค ์ปฌ๋ผ๋ช ) ์ฌ์ ์ (0) | 2021.12.15 | 
|---|---|
| [JPA] ํ๋์ ์ปฌ๋ผ ๋งคํ - @Embedded (์๋ฒ ๋๋ ํ์ ๋งคํ) (0) | 2021.12.15 | 
| [JPA] ์์๊ด๊ณ ๋งคํํ๋ ๋ฐฉ๋ฒ (0) | 2021.12.15 | 
| [JPA] ์ฐ๊ด๊ด๊ณ ๋งคํํ๋ ๋ฐฉ๋ฒ (2) | 2021.12.15 | 
| [JPA] ์ฐ๊ด๊ด๊ณ ํธ์ ๋ฉ์๋ ์์ฑํ๊ธฐ (0) | 2021.12.14 |