저는 DDD를 처음 사용합니다. 집계 루트의 키로 일반 AggregateId (GUID가 포함 된 String 포함)를 사용하는 많은 예제 프로젝트를 보았습니다.DDD 집계 ID 및 외래 키
OneToMany 관계에있는 자식에서 aggregateRoot를 참조하는 방법에 대해 궁금합니다.
Order AggregateRoot 및 OrderLine이 있다고 가정 해보십시오. OrderLine이 데이터베이스 레벨에서이를 참조 할 수 있도록 GUID 옆에 여분의 생성 된 (예 : 시퀀스) ID가있는 것이 현명합니까? 또는 GUID를 주문하려면 orderLine의 외래 키입니까? 성능에 영향이 있습니까?
예 :
BaseAggregateRoot :
@MappedSuperclass
public abstract class BaseAggregateRoot {
@EmbeddedId
@AttributeOverrides({
@AttributeOverride
(name = "idValue", column = @Column(name = "aggregateId", nullable = false))
})
protected AggregateId aggregateId;
...
주문 :
@Entity
public class Order extends BaseAggregateRoot{
// is this ID necessary?
@Id
@GeneratedValue(generator = "OrderSequenceGenerator")
@SequenceGenerator(name = "OrderSequenceGenerator", sequenceName = "ORD_SEQ1", allocationSize = 1)
@Column(name = "ord_seq")
private Long id;
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JoinColumn(name = "aggregateId") <-- should this point to ID or aggregateId?
private List<OrderLine> orderLines;
가 AggregateRoot 뜻과는 신원이 SQL 기본 키되지 않습니다입니다! 그것은 당신이 집계하는 방법에 달려 있으며, 집계는 다른 집계의 참조를 가질 수 있습니다. – Ehsan