知识卡片
实体与组件的区别
内容
持久化对象可以分成两类:实体(entity)拥有独立的持久化身份——自己的主键、可以被单独 创建/查询/删除,生命周期不依附于任何其他对象;组件(component,也叫值对象)虽然也能 存入数据库,却只是某个实体的从属部分,没有自己的主键,脱离宿主实体就没有独立存在的意 义(比如”专辑里第几张唱片第几首曲目”这个信息,本身不需要独立身份,只依附于专辑)。区 分两者的判断标准很简单:这个概念如果脱离了它所属的实体,还有没有被单独查询、单独删除 的意义?没有,就该建模成组件而非实体。发散:这正是DDD里Entity与Value Object区分的雏 形——早在有人给它起这个名字之前,ORM工具就已经因为”要不要给这行数据一个独立主键”这 个实际问题,被迫做出同样的划分。
参考来源
《精通Hibernate》第5章《扩充集合中的关联》