知识卡片
实体用@OneToMany值对象用@ElementCollection
内容
样式阻抗需在对象图与关系表之间互转。当对象图中实体组合另一实体(两者都有身份标识),映射到库可用主外键关联(一对一/一对多/多对一/多对多),领域模型用@OneToMany注解、@JoinColumn指定外键(如HourlyEmployee聚合根与TimeCard实体)。但若一对多的”多”端是值对象,因值对象没有唯一身份标识,其数据模型也没有主键,而是把实体表主键作为外键表达归属关系——此时领域模型仍用集合表达一对多,但注解不是@OneToMany,而是@ElementCollection,配合@CollectionTable标记关联表与外键(如SalariedEmployee与Absence值对象)。关键约束:Absence值对象定义中无须再定义employeeId字段,因为它不能脱离聚合根单独存在,这正是聚合对领域模型的设计约束。发散:选@OneToMany还是@ElementCollection,先问”多端有没有独立身份标识”,答案即注解。
参考来源
- 位置:《解构领域驱动设计》第19章 19.2.2(源文件:_epub-src/OEBPS/032.xhtml)
- 结论依据:原文以实体/值对象区分@OneToMany与@ElementCollection的适用,并强调聚合约束。
- 原始内容:使用的注解并非@OneToMany,而是@ElementCollection……这是聚合对领域模型产生的影响,也可视为聚合的设计约束。