论坛首页 Java企业应用论坛

【提问】HIBERNATE为什么不提倡用联合主键

浏览 24029 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2005-03-04  
相比联合主键,uuid.hex的方式生成ID,有什么优势啊?
我怎么想不明白
经理说,用联合主键可以避免冗余数据产生,我也没想明白,
还请个位大大指教一二
   发表时间:2005-03-04  
chris365 写道
相比联合主键,uuid.hex的方式生成ID,有什么优势啊?

编码简单, 可以用一个DAO就搞定所有的操作.
0 请登录后投票
   发表时间:2005-03-04  
我们公司那个做C++的家伙就爱用联合主键,恨死我了
0 请登录后投票
   发表时间:2005-03-07  
读取的性能比较差,O/R Mapping都是以主键的方式来识别纪录的,单一主键已经能够满足应用,而且速度快,所以会值得推荐
0 请登录后投票
   发表时间:2005-03-07  
其实你们说的都不对,在Hibernate来说,一个PO状态的判定完全依赖于主键属性的值,甚至很多PO的隐形的级联操作,例如关联对象的是否级联增加/更新这些判定也完全依赖于主键属性的值,所以主键属性值的维护对于Hibernate能否正确的运行,正确的持久化数据至关重要。

如果当你使用无意义的逻辑主键的时候,主键的维护完全是由Hibernate自动进行的,你无须关注主键的维护,自然就避免了很多问题的产生;而如果你选择自己手工维护主键(联合主键就必须手工维护),所有的这些维护主键的重任都必须由你来负责,你必须小心翼翼的编程,避免造成无法正确持久化,对于一个不是非常精通Hibernate的人来说,这通常比较难达到,更何况在分层架构中,Web层程序员仅仅操作DAO接口层,他更加不了解PO状态维护的个中微妙之处,极易犯错误那也是在所难免。

所以采用无意义的逻辑主键一定Hibernate的首选。
0 请登录后投票
   发表时间:2005-03-07  
>>所以采用无意义的逻辑主键一定Hibernate的首选。

但,通常主键是很有意义的字段,如流水号,电话号码等做主键!所以很多时候我的主键生成策略不得不选assigned :(
0 请登录后投票
   发表时间:2005-03-07  
如果是唯一主键,但是为assign,Hibernate能够做到级连删除/修改吗?
0 请登录后投票
   发表时间:2005-03-07  
Alan.Weng 写道
>>所以采用无意义的逻辑主键一定Hibernate的首选。

但,通常主键是很有意义的字段,如流水号,电话号码等做主键!所以很多时候我的主键生成策略不得不选assigned :(


呵呵, 这样说的话有扯到了业务主键和逻辑主键的争论上来了
0 请登录后投票
   发表时间:2005-03-08  
Alan.Weng 写道
>>所以采用无意义的逻辑主键一定Hibernate的首选。

但,通常主键是很有意义的字段,如流水号,电话号码等做主键!所以很多时候我的主键生成策略不得不选assigned :(


但是Hibernate/JDO这种ORM都是不允许你修改主键的,万一用户输入错误了电话号码,并且还做了一堆相关的东东,他想修改的话, 系统只能先删除,再插入一堆数据了。如果是无意义主键,那么就update一下就OK了。
0 请登录后投票
   发表时间:2005-03-09  
使用逻辑主键好处多多,如果认为这也是数据冗余那我也就无话可说了
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics