@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 ํ๋ก๊ทธ๋๋ฐ - ๊น์ํ]
'๐๏ธ 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 |