知识卡片
@EmbeddedId映射身份标识值对象的两项硬要求
内容
JPA用@EmbeddedId建立数据表主键与身份标识值对象之间的映射(如为Employee定义EmployeeId值对象作@EmbeddedId字段)。JPA对主键类有两项硬要求:相等性比较与序列化支持——即主键类需实现Serializable接口、并重写Object的equals()与hashCode();值对象类还需声明@Embeddable注解。此外,由于框架需通过反射创建值对象,若值对象定义了带参构造函数,还必须补一个默认(无参)构造函数。发散:这三点(Serializable+equals/hashCode、@Embeddable、默认构造函数)是”值对象当主键”最常见的三处漏配,缺一就会在反射创建或作查询键时出问题。
参考来源
- 位置:《解构领域驱动设计》第19章 19.2.2(源文件:_epub-src/OEBPS/032.xhtml)
- 结论依据:原文列出@EmbeddedId主键类的相等性/序列化要求及默认构造函数要求。
- 原始内容:JPA对主键类有两个要求:相等性比较与序列化支持,即需要主键类实现Serializable接口,并重写Object的equals()与hashcode()方法。