知识卡片
为了级联而被迫升级为实体
内容
[[实体与组件的区别]]里提到,组件(值对象)没有独立主键、依附于宿主实体存在。但级联操 作(自动保存/删除关联对象)这一能力,往往只在实体与实体之间的关联上才被支持——组件因 为没有独立身份,无法作为级联关系的一端。于是当你确实需要”保存专辑时自动保存它包含的 曲目”这种自动化行为时,就被迫把本该建模成组件的对象(如专辑里的一条曲目记录)强行提 升为一个带独立ID的实体,即使这个ID在业务上毫无意义、纯粹是为了满足框架机制而存在。发 散:这是一类常见的架构妥协——为了获得框架提供的某个自动化能力,不得不在建模的纯粹性 上让步,多引入一个本不该存在的标识符。遇到这种情况时,值得清楚地知道这是”为了框架机 制的让步”,而不是”业务本身需要这个ID”,避免日后误把这个技术性妥协当成设计意图去维护。
参考来源
《精通Hibernate》第7章《另一种方法》