文档章节

关于值对象与实体的再讨论

猪刚烈
 猪刚烈
发布于 2014/10/12 11:40
字数 576
阅读 22
收藏 0

在领域模型中,实体与值对象的概念非常重要,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。

本文转载自:http://blog.csdn.net/bluishglc/article/details/5551842

共有 人打赏支持
猪刚烈
粉丝 22
博文 708
码字总数 110
作品 1
海淀
程序员
私信 提问
DDD学一步写一篇--DDD开发实践流程

DDD大家讨论的比较多的一般都是DDD的思想和理论,很少有文章讨论具体是如何实施和落地,所以这也导致很多同学看完了Evans经典巨著后对DDD还是不知道如何去实施。这篇文章我们讨论下DDD的实施...

monkey01
11/25
0
0
在Entity Framework中使用存储过程(四):如何为Delete存储过程参数赋上Current值?

继续讨论EF中使用存储过程的问题,这回着重讨论的是为存储过程的参数进行赋值的问题。说得更加具体一点,是如何为实体映射的Delete存储过程参数进行赋值的问题。关于文中涉及的这个问题,我个...

长平狐
2012/09/04
321
0
从Prism中学习设计模式之Event Aggregator 模式

Event Aggregator 模式定义:渠道事件从多个对象通过一个单一的对象来简化clients的注册。 结构图: Prism的Event Aggregator 模式:Event Aggregator允许多对象定位和发布、订阅事件。 我们...

andrewniu
05/29
0
0
『译』关于返回 Null 值的问题

我总感觉一个方法返回null值有问题。 当读了Misko Hevery关于how to think about OO的博客文章后,又让我想起这个问题。 我感觉返回null值是有问题的,它大量的被使用在一个方法有不同的返回...

justjavac
2012/11/09
133
0
第一章 数组与指针概念剖析

数组与指针生来就是双胞胎,多数人就是从数组的学习开始指针的旅程的。在学习的过程中,很自然就会经常听到或见到关于数组与指针的各种各样的看法,下面我节选一些在各种论坛和文章里经常见到...

北极心
2016/08/11
4
0

没有更多内容

加载失败,请刷新页面

加载更多

Java程序员可知为何公司宁花25K重新招人,也不花20K留住老员工?

身在职场,经常会暗自打听同事工资,尤其是得知身边新入职同事的工资居然比自己高,还高出一大截时,心里自然很不平衡,一心想要离职。 那么,为什么公司宁愿花高价招聘新员工也不愿意给老员...

Java填坑路
7分钟前
2
0
如何通俗地解释什么是网桥?

吴伟祥
11分钟前
1
0
阿里云文件存储(NAS)助力业务系统承载双十一尖峰流量

2018天猫双11全球狂欢节,全天成交额再次刷新纪录达到2135亿元,其中总成交额在开场后仅仅用了2分05秒即突破100亿元,峰值的交易量达到惊人的高度,背后离不开阿里云大数据计算和存储能力的支...

阿里云云栖社区
11分钟前
0
0
【windows 找不到“\\192.168.X.X”,请检查拼写是否正确】错误&139端口和445端口区别

今天像往常一样,通过共享盘访问其他主机时,却出现如题的错误,百思不得其解,毕竟没有改动什么配置啊,地址也没输错啊。 然后就在网上看到了一篇博客,才想起来上周末因为考虑到安全问题,...

fang_faye
12分钟前
0
0
示例Express中路由规则及获取请求参数

本次给大家分享一篇基于express中路由规则及获取请求参数的方法,写的十分的全面细致,具有一定的参考价值,对此有需要的朋友可以参考学习下。如有不足之处,欢迎批评指正。 express中常见的...

前端攻城小牛
15分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部