사용자가 쉅취한 음료를 기록하는 테이블을 생성할 때 음료 영양성분 데이터를 복사해서 스냅샷 형태로 저장하는 방식의 설계
@Entity
public class BeverageInputRecord extends BaseTime{
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
Long beverageInputRecodeId;
@ManyToOne
CafeBeverage cafeBeverage;
@ManyToOne
ReadyBeverage readyBeverage;
@ManyToOne
UserEntity userEntity;
}
input record의 최종 설계 외래키를 이용한 스냅샷 저장을 구현
@Entity
@Inheritance(strategy = InheritanceType.JOINED) // 상속 전략
@DiscriminatorColumn(name="type") // 구분 하는 칼럼
public class Beverage {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
Long beverageId;
@Embedded
BeverageInformation beverageInformation;
}
@Entity
@DiscriminatorValue("ready_beverage")
public class ReadyBeverage extends Beverage {
}
@Entity
@DiscriminatorValue("cafe_beverage")
public class CafeBeverage extends Beverage{
@ManyToOne
Cafe cafe;
}
부모 테이블인 beverage 를 생성하고 이를 joined 상속 전략을 사용해서 테이블 간의 중복된 정보를 생략하고 하나의 공통된 칼럼은 beverage colum 으로 관리할 수 있게 만들었다.