JiveJdon Community Forums
在线177人   首页   主题表   培训咨询   标签   查搜   注册    登陆 RSS
首页 » 论坛 » 语言平台技术讨论
???en_US.forumThreadPrev.name??? 上一主题
RSS google yahoo 365Key网摘 CSDN网摘 添加到百度搜藏 POCO网摘 新浪ViVi QQ网摘
???en_US.forumThreadNext.name??? 下一主题
1 2 Go 共有 18 回复(2页) 阅读936次
 发表新帖子   回复该主题贴
xyz



发表文章: 94
注册时间: 2005年08月22日
悄悄话
个人博客
在线? 当前离线
我要关注该作者发言
我的O/R MAPPING (HIBERNATE)方法小结 2005年08月22日 20:18 收藏关注本主题 到本帖网址 加入本帖到收藏夹 请用鼠标选择需要回复的文字再点按本回复键 回复该主题
标签                    
(一)对象之间的关系:
1. 依赖:
依赖对象通过调用被依赖对象的方法来获得服务。一种比较松散的关系,并且是短期的。我们的过程与对象往往依赖与我们的实体域对象。如在struts 的 action中调用模型层的方法。
2. 关联
它使一个类指到另一个类的属性。长期的
3. 聚合
聚合关系是关联关系的一种,是强的关联关系。聚合是整体和部分之间的关系。
4. 组合
也叫合成关系,组成关系是关联关系的一种,是比聚合关系强的关系。对象负责代表部分的对象的生命周期。
注:既然聚合,组合关系属于关联关系,那么如何区分一般关联关系,聚合关系和组合关系呢?
一般关联:只要一个对象联系到另外一个对象就形成了关联关系。如:人和他的猫,黑豹乐队和窦魏,pc机和显示器。
聚合关系:一种强关联关系,它要求有部分和整体的关系,并且没有了整体部分也可以独立存在。在上面三个例子中人和它的猫显然没有部分和整体的关系,所以只能是一般的关联关系。而黑豹乐队和窦魏,窦魏等人组成了黑豹乐队即:窦魏和黑豹是整体和部分的关系。而
窦魏脱离了黑豹(早就离开了)更或者黑豹不存在了那么窦魏仍然可以以音乐人的身份存在(即对象仍然可以独立存在)所以它属于聚合关系。组成关系是可以共享的。(窦魏也可以加入其他乐队)。
组合关系:一种更强的整体和部分的关系。它并且要求代表整体的对象负责代表部分的对象的生命周期,组成关系是不能共享的。如:pc机和显示器的关系。
我觉得:如果两个实体是整体和部分的关系,那么它们到底是聚合还是组合,这取决于你的需求。比如说:pc机和显示器的关系,如果你的系统中,显示器脱离了pc机就不存在意义了,也可以说:所有显示器的访问都是通过pc机进行的,那么你可以把关系设定为组合(如你在为一个只买品牌机的代理商作系统你可能是可以这么作的)。如果你的显示器脱离的pc机仍然可以独立存在,也就是说在系统中可以直接访问显示器对象,那么你可以将关系设为聚合(如你在为一个买散件的代理商作系统你可能是可以这么作的)
5. 继承
这个我不想多讲了,用过面向对象的语言都应该知道。
(二)关系数据库的关系
一对一
一对多
多对一
多对多
(三)o/r mapping策略
1.继承:
对于继承关系一般有三种策略:
策略1继承树的每个类对应一个表<joined-subclass >
共享主键
策略2继承树的根类对应一个表<discriminator ><subclass >
需要添加一个识别字段
策略3继承树的叶子类对应一个表
不支持多态查询
2.关联
2.1一对一
一半有两种策略:
策略1:唯一的外键
<many-to-one>+unique=”true” (唯一的外键)
<one-to-one>
策略2:共享主键
<one-to-one>
<one-to-one><constrained=”true”> (既是主键又是外键)
注意:生成方式需要用:foreign
2.2一对多(无需多说)
2.3多对一(无需多说)
2.4多对多
策略1:A,B表多对多的关系需要引入C表。
C表中的所有属性即为主键又为外键分别参照A,B两表。
C表中不可以有其他属性
策略2:将多对多拆分成两个一对多:
A,B对象多对多的关系需要引入C对象。使得A,B两对象与C对象的关系为一对多。对应数据库中:A,B表多对多的关系需要引入C表。A,B两表与C表的关系为一对多。
C表又自己的主键
C表中又非主键的外键分别参照A,B两表。
C表中不可以有其他属性
如;学生 ,课程为多对多的关系 那么引入学生选课。
注意:策略1和策略2的不同在于:策略2引入了新的对象而策略1没有。这是因为这样:策略1的c表不能又自己的东西。而策略2有。
2.5其他
上面说过:聚合与组成是关联的一种所以他们也符合以上策略。
特别的:当用到组合关系的是否我们可用用到hibernate的“组件”<component>.由于“组件”它完全可以满足组成关系的强关联。
3.依赖
一般不在实体域对象中体现。
jane830527



发表文章:
注册时间: 2005年08月23日
悄悄话
个人博客
在线? 当前离线
我要关注该作者发言
Re: 我的O/R MAPPING (HIBERNATE)方法小结 2005年08月23日 09:16 收藏关注本主题 到本帖网址 加入本帖到收藏夹 请用鼠标选择需要回复的文字再点按本回复键 回复该主题
好!
kkkk



发表文章:
注册时间: 2003年04月22日
悄悄话
个人博客
在线? 当前离线
我要关注该作者发言
Re: 我的O/R MAPPING (HIBERNATE)方法小结 2005年08月23日 09:33 收藏关注本主题 到本帖网址 加入本帖到收藏夹 请用鼠标选择需要回复的文字再点按本回复键 回复该主题
支持
xyz



发表文章: 94
注册时间: 2005年08月22日
悄悄话
个人博客
在线? 当前离线
我要关注该作者发言
O/R MAPPING (HIBERNATE)方法小结 (补充内容): 2005年08月23日 09:54 收藏关注本主题 到本帖网址 加入本帖到收藏夹 请用鼠标选择需要回复的文字再点按本回复键 回复该主题
另外我看到了一种”键关联”的方法,感觉很有道理。我理解了一下总结如下:
1. 一般关联:
这种方法对于一般的关联总是引入c表(另外的一张表)仅仅表示关系。
C表的主键有分别指向A,B两表(外键)。当指向一方的外键unique=”true”即唯一,那么这一方为“一”,反之为“多”的一方。这样就可以形成一般的关联关系。但是注意的是:c表不映射为对象。C表也没有自己的属性。
2. 聚合和组成
当实体A的非主键列中有一个引自实体B的时候,这种关系是B聚合A。如果这种引用是强制性的,则是合成关系,否则为聚合关系。是否为强制性,只需要将引用列设为非空即可;
3. 继承
当实体A的主键引用自实体B的时候(即为外键),那么A继承 B。
总结:我觉得O/RM的方法有很多,我们可以看到“按外键“的方法思路很清晰。但是它在解决一般的关联的时候总是引入另外一张表这样势必影响效率。另外,既然聚合和组合是关联的一种那么即使是组合关系我也把它看成一般关联,也不算错的。关系数据库一开始就不是为了面向对象的语言服务的,所以我们在这里映射无论那种方法似乎都不能说是完全的,正确无误完成了O/RM。
所以我觉得一切都要看我们的项目需求。因地制宜!
robert8292



发表文章:
注册时间: 2005年08月24日
悄悄话
个人博客
在线? 当前离线
我要关注该作者发言
Re: 我的O/R MAPPING (HIBERNATE)方法小结 2005年08月24日 10:50 收藏关注本主题 到本帖网址 加入本帖到收藏夹 请用鼠标选择需要回复的文字再点按本回复键 回复该主题
“策略2:共享主键”关于这个问题昨天刚被问到,凭着项目中的记忆,勉强答对了,汗。
xxaxxx



发表文章:
注册时间: 2005年08月31日
悄悄话
个人博客
在线? 当前离线
我要关注该作者发言
Re: 我的O/R MAPPING (HIBERNATE)方法小结 2005年08月31日 14:07 收藏关注本主题 到本帖网址 加入本帖到收藏夹 请用鼠标选择需要回复的文字再点按本回复键 回复该主题
水平不错!
banq



发表文章: 11282
注册时间: 2002年08月03日
悄悄话
个人博客
在线? 当前离线
我要关注该作者发言 70人关注
Re: 我的O/R MAPPING (HIBERNATE)方法小结 2006年01月02日 21:38 收藏关注本主题 到本帖网址 加入本帖到收藏夹 请用鼠标选择需要回复的文字再点按本回复键 回复该主题
该文章好就好在它从设计角度来看待hibernate,对象关系和数据库之间的存在阻抗,如何通过hibernate配置设置,该文从这个角度描述。

如果你看懂本文,并且觉得很好,说明你已经掌握了使用Hibernate的真谛。

如果你不以为然,或者没看懂,虽然你也在用Hibernate,说明你只是将hiberante作为数据库傀儡,请尽快转变你的思路到域模型驱动分析设计上来。

banq



发表文章: 11282
注册时间: 2002年08月03日
悄悄话
个人博客
在线? 当前离线
我要关注该作者发言 70人关注
Re: 我的O/R MAPPING (HIBERNATE)方法小结 2006年01月02日 21:40 收藏关注本主题 到本帖网址 加入本帖到收藏夹 请用鼠标选择需要回复的文字再点按本回复键 回复该主题
从另外一个方面说:使用hibernate需要相当的设计功底,而非传统的数据库功底,如果你没有这个功底,会误用hibernate,反而是一种损害。

http://www.jdon.com/jive/article.jsp?forum=91&thread=24451
stook



发表文章:
注册时间: 2006年01月12日
悄悄话
个人博客
在线? 当前离线
我要关注该作者发言
Re: 我的O/R MAPPING (HIBERNATE)方法小结 2006年01月12日 20:50 收藏关注本主题 到本帖网址 加入本帖到收藏夹 请用鼠标选择需要回复的文字再点按本回复键 回复该主题
嗯,言简意赅,很不错的总结呀!!支持!!
fzing



发表文章:
注册时间: 2006年08月02日
悄悄话
个人博客
在线? 当前离线
我要关注该作者发言
有个不解请教大哥? 2006年08月02日 08:57 收藏关注本主题 到本帖网址 加入本帖到收藏夹 请用鼠标选择需要回复的文字再点按本回复键 回复该主题
关于2.4多对多中,文章提到了两种策略
策略1:A,B表多对多的关系需要引入C表。
策略2:将多对多拆分成两个一对多。
小弟未能领悟两者区别,能否请大哥举一示例详细说明一下?
还有两中策略中文章都提到C表中不可以有其他属性
请看下面一个设计:
  学生:Student(学号(pk), 姓名, 年龄);
  课程:Course(课程名称(pk), 学分);
  选课关系:SelectCourse(学号(pk), 课程名称(pk), 成绩)。
其中关系表中的成绩是否算其他属性呢??请教大哥
yuansu2006



发表文章:
注册时间: 2006年08月24日
悄悄话
个人博客
在线? 当前离线
我要关注该作者发言
Re: 我的O/R MAPPING (HIBERNATE)方法小结 2006年08月24日 17:23 收藏关注本主题 到本帖网址 加入本帖到收藏夹 请用鼠标选择需要回复的文字再点按本回复键 回复该主题
大家好!
hdde



发表文章:
注册时间: 2007年07月05日
悄悄话
个人博客
在线? 当前离线
我要关注该作者发言
回复:有个不解请教大哥? 2007年11月13日 10:09 收藏关注本主题 到本帖网址 加入本帖到收藏夹 请用鼠标选择需要回复的文字再点按本回复键 回复该主题
我也想知道这样的联合主键的关系表是什么策略?
[该贴被hdde于2007-11-13 10:10修改过]
cljspn



发表文章:
注册时间: 2008年03月16日
悄悄话
个人博客
在线? 当前离线
我要关注该作者发言
re:我的O/R MAPPING (HIBERNATE)方法小结 2008年03月16日 17:14 收藏关注本主题 到本帖网址 加入本帖到收藏夹 请用鼠标选择需要回复的文字再点按本回复键 回复该主题
好呀,本人正在研究Hibernate呢,受益了.
763691



发表文章:
注册时间: 2007年11月18日
悄悄话
个人博客
在线? 当前离线
我要关注该作者发言
re:我的O/R MAPPING (HIBERNATE)方法小结 2008年04月10日 08:44 收藏关注本主题 到本帖网址 加入本帖到收藏夹 请用鼠标选择需要回复的文字再点按本回复键 回复该主题
- -! 刚学几天 还看不懂
freeren



发表文章: 100
注册时间: 2007年02月15日
悄悄话
个人博客
在线? 当前离线
我要关注该作者发言
回复:有个不解请教大哥? 2008年10月17日 10:40 收藏关注本主题 到本帖网址 加入本帖到收藏夹 请用鼠标选择需要回复的文字再点按本回复键 回复该主题
>>使用Hibernate需要相当的设计功底,而非传统的数据库功底,如果你没有这个功底,会误用Hibernate,反而是一种损害。

这一点深有体会啊,我们目前做的项目都是数据库驱动设计,结果再来用hibernate,那效果真的很无语,想用好hibernate或者想把hibernate的优势发挥都难,还不如直接用jdbc。说要面向对象,结果所谓的实体全部是从数据库的表及一个个字段映射过来,包括其外外键都映射成属性,那类与类之间一点关系都没有了。这样hibernate用来做什么用?OR体现在哪?又从何OO呢?
标签                    
共有 18 回复(2页) Go 1 2
???en_US.forumThreadPrev.name??? 上一主题
  Go back to the topic 返回本主题   Go back to the topic listing返回主题列表    返回页首返回页首
???en_US.forumThreadNext.name??? 下一主题
正在读取,请等待...
查询本论坛内 回复超过的热门帖子
标题
 
粗体: [b]文本[/b] 斜体: [i]文本[/i] 下划线 [u]文本[/u] 插入网上的图片 [img]http://wwww.xxxx.com/img.ext[/img] 插入代码 [code]程序代码[/code]  插入url链接 [url]http://url[/url] / [url=http://url]URL加下滑线[/url] 上传图片 word文档 Txt等附件
内容
  提交时自动拷贝以上内容到剪贴板 Ctrl+V可取出;提问题前先查询标签列表

使用帮助 手机m.jdon.com RSS add to google add to yahoo
解惑之道在J道 ,打造中国最具影响力的的软件架构社区 推荐FireFox或Chrome快速浏览本站
OpenSource JIVEJDON Powered by JdonFramework Code © 2002-10 jdon.com

anti spam