关于值对象与实体的再讨论
来源:互联网 发布:matlab 植物生长算法 编辑:程序博客网 时间:2024/06/16 11:18
在领域模型中,实体与值对象的概念非常重要,Hibernate也要求明确区分这两者,以至于它们的映射配制上都不一样。
以一对多为例,同是一个set,如果是实体会使用<one-to-many>,@OneToMany,如果是值对象,会使用<composite-elementt>,@CollectionOfElements.实体与值对象的一个重要区别在于:实体有自己的生命周期,而值对象没有,它总是依附于一个实体,如果这个实体不存在了,那么它也将一同消亡。这一点在hibernate的映射上体现的非常明显:@OneToMany有级联选项,而@CollectionOfElements没有。
小结:
实体与值对象的区别:
1.实体一定要有一个唯一标识符(ID)!以确保系统能够明确的区分每一个实体,并在需要的时候准确的找到它。值对象没有ID!这是因为系统从来不会直接去检索值对象。值对象总是从属于某个实体的。
2.实体有自己独立的生命周期,而值对象没有。它总是依附于某个实体。如果实体不存在了,它也将一同消亡。
3.不会出现两个以上的实体引用一个值对象的情况。这也是对2一个保证。如果两个实体有同样的值,那也只可能是有两个值一样的值对象,而不是引用同一个值对象。
典型的值对象例子:金钱,地址。
对值对象的数据库建模的原则:
1.如果这种值对象只是由一种实体使用并且是一对一的关系,那么使用@Embedded.将值对象的数据列合并到实体表的中。
2.如果有多种实体都会用到这种值对象,或者是一种实体有一组而不是一个值对象,这时候要需要把值对象做成单独的一张表了。注意:这个单独的表是一个关联表,在hibernate中不推荐也不支持把值对象建成一个绝对独立的表,然后以外键或关联表的形式去参照一个实体表。请参见JPwH一书6.3 Mapping collections with annotations。
- 关于值对象与实体的再讨论
- 关于领域驱动设计的实体对象与值对象的区别考虑
- 关于共同生存周期的对象与锁的讨论
- 关于C++中类与对象的一些讨论
- 实体与值对象
- 关于const对象的讨论
- 关于实体类对象与XML的转换
- 关于实体类对象与XML的转换
- 关于实体类对象与XML的转换
- 对象与实例的讨论
- 关于如何把ResultSet中查询到的值放到自定义实体中的方法讨论
- 关于临时对象的一些讨论
- 关于Litepal存储对象,集合的讨论
- 关于类和对象的进一步讨论
- 关于传值与传引用的讨论
- 基础备忘:关于传值与传引用的讨论
- Hibernate与DDD#实体与值对象
- 关于 OpenGL 中平移矩阵变换与实体对象坐标平移的关系分析结论
- 默认连接(二)
- Java的Eclipse与Tomcat的连接
- 客户端获取URL
- Windows和linux GHOST
- matlab安装工具箱
- 关于值对象与实体的再讨论
- ms sql 一次插入多条记录的语句
- 做个通用的JDBC-DAO类,有点像Hibernate的雏形
- linux下部署tomcat+axis+maven+jdk
- Pcap程序设计
- ubuntu下ibus的设置
- 慈铭体检A类套餐(男)给大家做个汇总,身体健康第一
- A类套餐(女)给大家做个汇总,身体健康第一
- JUnit4 中的几个常用注释