我對DDD相當陌生。我見過許多使用通用AggregateId(帶有包含GUID的String)作爲聚合根鍵的示例項目。DDD彙總ID和外鍵
我想知道如何從一個OneToMany關係中引用一個孩子的aggregateRoot。
假設有一個Order AggregateRoot和一個OrderLine。在GUID旁邊有一個額外的生成(例如序列)ID是否明智,因此OrderLine可以引用數據庫級別的ID?或者是orderLine的外鍵來訂購GUID?是否有性能影響?
例如。
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