반응형
@SecondaryTable을 이용한 밸류 매핑
- 한 테이블 내부에 컬럼을 다른 테이블에서 관리할 때가 있다. (밸류 컬렉션을 별도 테이블로 매핑)
- 만약 자식 테이블에서 외부키를 부모 테이블과 같이 쓰는 경우가 있는데
- 이때 @SecondaryTable과 @AttributeOverride를 이용해서 자식 테이블과 식별자를 매핑한다.
- 자식 테이블은 식별자가 존재하지만 밸류로 속하고 엔티티라고 볼 수 없다.
- 무조건 연관되어 두개의 테이블 모두 가져와야 할때(Inner Join)만 사용해야 한다.
예시
- 상품에 상품 소개 내용과 재고 정보를 사용
- ProductContents = 상품 소개 내용, ProductStock = 재고 정보
@Entity
@Table(name = "product")
@Where(clause = "del_date IS NULL")
@Builder
@ToString
@NoArgsConstructor
@AllArgsConstructor
@SecondaryTables ({
@SecondaryTable(name = "product_contents", pkJoinColumns = @PrimaryKeyJoinColumn(name = "pd_code")),
@SecondaryTable(name = "product_stock", pkJoinColumns = @PrimaryKeyJoinColumn(name = "pd_code"))
})
public class Product {
@EmbeddedId
private ProductCode code;
@AttributeOverride(name = "contents", column = @Column(table = "product_contents", name = "pdc_contents", length = 500, nullable = false))
@Embedded
private ProductContents contents;
@AttributeOverrides({
@AttributeOverride(name = "count", column = @Column(table = "product_stock", name = "pds_count")),
@AttributeOverride(name = "active", column = @Column(table = "product_stock", name = "pds_active", columnDefinition = "enum"))
})
@Embedded
private ProductStock stock;
}
@Embeddable
@Getter
@ToString
@NoArgsConstructor
@AllArgsConstructor
public class ProductContents {
private String contents;
}
@Embeddable
@Getter
@ToString
@NoArgsConstructor
@AllArgsConstructor
public class ProductStock {
private int count;
@Enumerated(EnumType.STRING)
private StockActiveType active;
}
반응형
'DDD' 카테고리의 다른 글
DIP(역전 의존 원칙)란? (0) | 2021.09.14 |
---|---|
AttributeConverter를 이용한 밸류 매핑 처리 (0) | 2021.09.14 |
엔티티(Entity)와 밸류(Value)란? (0) | 2021.09.14 |
BOUNDED CONTEXT 간 통합 (0) | 2021.09.14 |
BOUNDED CONTEXT 간 관계 (0) | 2021.09.14 |