[JPA] ๊ณ ๊ธ ๋งคํ : ๋งคํ ์ ๋ณด๋ง ์ ๊ณตํ๊ธฐ using @MappedSuperClass
by rlaehddnd0422์์ ๋ฐฐ์ด ์์ ๊ด๊ณ๋งคํ์ ๋ถ๋ชจ ํด๋์ค์ ์์ ํด๋์ค ๋ชจ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์ด๋ธ๊ณผ ๋งคํํ์ต๋๋ค.
๋ง์ฝ ๋ถ๋ชจ ํด๋์ค๋ ํ ์ด๋ธ๊ณผ ๋งคํํ์ง ์๊ณ ๋ถ๋ชจ ํด๋์ค๋ฅผ ์์๋ฐ๋ ์์ ํด๋์ค๋ค์๊ฒ ์์ ํด๋์ค์์ ๊ณตํต์ผ๋ก ์ฌ์ฉํ๋ ๋งคํ ์ ๋ณด๋ง ์ ๊ณตํ๊ณ ์ถ์ ๋ ์ด๋ป๊ฒ ํ ์ ์์๊น์?
@MappedSuperClass๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฉ๋๋ค. ๋ฐ๋ก ์์๋ถํฐ ์ดํด๋ด ์๋ค.
@MappedSuperClass๋ ์๋ฐ์ ์ถ์ ํด๋์ค์ ๋งค์ฐ ๋น์ทํฉ๋๋ค. @Entity๋ ์ค์ ๋งคํ์ด ์ด๋ฃจ์ด์ง์ง๋ง @MappedSuperClass๋ ์ค์ ํ ์ด๋ธ๊ณผ๋ ๋งคํ๋์ง ์์ต๋๋ค. ๋จ์ํ ๋งคํ์ ๋ณด๋ฅผ ์์ํ ๋ชฉ์ ์ผ๋ก๋ง ์ฌ์ฉ๋ฉ๋๋ค.
๋จ์ํ ์์ ํด๋์ค์์ ๊ณตํต์ผ๋ก ์ฌ์ฉํ๋ ํ๋๋ฅผ BaseEntity์ ๋ชจ์์ ๋งคํ ์ ๋ณด๋ง ์ ๊ณตํ๋๋ก ์์ ๊ด๊ณ๋ฅผ ๋งคํํด๋ด ์๋ค.
@MappedSuperClass // @Entity X
public abstract class BaseEntity {
@Id @GeneratedValue
private Long id;
private String nmae;
}
@Entity
public class Member extends BaseEntity {
// ID ์์
// NAME ์์
private String email;
}
@Entity
public class Seller extends BaseEntity {
// ID ์์
// NAME ์์
private String shopName;
}
- ๋งคํ ์ ๋ณด๋ง ์ ๊ณตํ๊ธฐ ์ํด ๋ถ๋ชจํด๋์ค์ @Entity๊ฐ ์๋ @MappedSuperClass๋ก ๋งคํํด์ค๋๋ค.
๋ถ๋ชจ๋ก ๋ถํฐ ๋ฌผ๋ ค๋ฐ์ ๋งคํ์ ๋ณด๋ฅผ ์ฌ์ ์ํ๊ณ ์ถ์ผ๋ฉด @AttributeOverrides๋ @AttributeOverride๋ฅผ ์ฌ์ฉํ๊ณ , ์ฐ๊ด๊ด๊ณ๋ฅผ ์ฌ์ ์ํ๋ ค๋ฉด @AssociationOverrides๋ @AssociationOverride๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฉ๋๋ค.
@Entity
@AttributeOverrides({@AttributeOverride(name="id", column= @Column(name = "MEMBER_ID")),
@AttributeOverride(name="name", column= @Column(name = "MEMBER_NAME"))})
public class Member extends BaseEntity {
<์ ๋ฆฌ>
- @MappedSuperclass๋ ํ ์ด๋ธ๊ณผ๋ ๊ด๊ณ๊ฐ ์๊ณ ๋จ์ํ ์ํฐํฐ๊ฐ ๊ณตํต์ผ๋ก ์ฌ์ฉํ๋ ๋งคํ์ ๋ณด๋ฅผ ๋ชจ์์ฃผ๋ ์ญํ ์ ํฉ๋๋ค.
<์ฐธ๊ณ ์๋ฃ>
'๐ Backend > Spring Data JPA' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JPA] ์์์ฑ ์ ์ด by Cascade ์ต์ (0) | 2023.05.05 |
---|---|
[JPA] ํ๋ก์(Proxy)์ ์ง์ฐ๋ก๋ฉ(Lazy Loading) (0) | 2023.05.04 |
[JPA] ๊ณ ๊ธ ๋งคํ : ์์ ๊ด๊ณ ๋งคํ (0) | 2023.05.03 |
[JPA] ๋ค๋๋ค ๋จ๋ฐฉํฅ, ์๋ฐฉํฅ ์ฐ๊ด๊ด๊ณ ๋งคํ (0) | 2023.05.02 |
[JPA] ๋ค๋์ผ, ์ผ๋๋ค, ์ผ๋์ผ (๋จ๋ฐฉํฅ, ์๋ฐฉํฅ) ์ฐ๊ด๊ด๊ณ ๋งคํ (0) | 2023.05.01 |
๋ธ๋ก๊ทธ์ ์ ๋ณด
Study Repository
rlaehddnd0422