知识卡片
@Embedded把嵌套值对象映射为实体表的列
内容
设计良好的领域模型常呈现有嵌套层次的对象图(用值对象表现无须身份标识却有内聚知识的概念)。虽然嵌套的领域模型与扁平的关系模型不匹配,但通过@Embedded与@Embeddable注解可轻松实现这种嵌套组合的对象关系:如Employee实体的email属性(Email值对象)和address属性(Address值对象)标记@Embedded,Address/Email类标记@Embeddable。它们在领域模型中虽是独立类,在数据模型中却都是employees表中的列——Email仅对应一列(定义为类是为体现邮件领域概念、封装验证逻辑),Address封装country/province等多个内聚值映射为多列(维护地址完整性、复用领域概念)。同样,为值对象定义了带参构造函数时需显式补默认构造函数以支持反射创建。发散:@Embedded让”对象里内聚、表里摊平”两全,是消解样式阻抗最轻量的手段。
参考来源
- 位置:《解构领域驱动设计》第19章 19.2.2(源文件:_epub-src/OEBPS/032.xhtml)
- 结论依据:原文说明@Embedded/@Embeddable把嵌套值对象映射为实体表列。
- 原始内容:通过JPA提供的@Embedded与@Embeddable注解可以非常容易实现这一嵌套组合的对象关系。