๋ฐ์ํ
์๋ฐ ORM ํ์ค JPA ํ๋ก๊ทธ๋๋ฐ - ๊ธฐ๋ณธํธ์ ๊ณต๋ถํ๋ฉฐ ์ ๋ฆฌํ ๋ด์ฉ์ ๋๋ค.
โ ์๊ตฌ ์ฌํญ ์ถ๊ฐ
- ์ํ์ ์ข ๋ฅ๋ ์๋ฐ, ๋์, ์ํ๊ฐ ์๊ณ ์ดํ ๋ ํ์ฅ๋ ์ ์๋ค.
- ๋ชจ๋ ๋ฐ์ดํฐ๋ ๋ฑ๋ก์ผ๊ณผ ์์ ์ผ์ด ํ์๋ค.
@MappedSuperclass
public class BaseEntity {
private String createdBy;
private LocalDateTime createdDate;
private String lastModifiedBy;
private LocalDateTime lastModifiedDate;
//getter, setter ์๋ต
}
์ฒซ๋ฒ์งธ ์๊ตฌ์ฌํญ์ ๋ง์กฑ์ํค๊ธฐ ์ํด, BaseEntity๋ผ๋ ํด๋์ค๋ฅผ ์์ฑํด์ ๊ณตํต ๋งคํ ์ ๋ณด๋ฅผ ์์ ์ํค๊ธฐ ์ํด
@MappedSuperclass ์ ๋ ธํ ์ด์ ์ ์ถ๊ฐํด ์ค๋ค.
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn
public abstract class Item extends BaseEntity {
@Id @GeneratedValue
private Long id;
//... ์๋ต
}
@DiscriminatorColumn์ ๊ธฐ๋ณธ๊ฐ์ DTYPE์ด๋ฏ๋ก ์๋ต์์ผ๋ ๋๋ค.
@Entity
public class Album extends Item {
private String artist;
private String etc;
//... ์๋ต
}
@Entity
public class Book extends Item {
private String author;
private String ibsn;
//... ์๋ต
}
@Entity
public class Movie extends Item {
private String director;
private String actor;
//... ์๋ต
}
๋ฐ์ํ