讨论Hibernate修改主键的方法? 补充一下,欢迎大家访问http://www.goodindeed.com 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你混淆了逻辑主键和物理主键,而且在数据库设计上犯了错误。在hibernate中,我们操作的都是domain object,而每个domain object是需要一个逻辑主键来进行唯一标识。这个主键必须唯一,无业务含义,不可修改。在大部分情况下,我们会映射到物理表的物理主键上。你寻求修改主键的方法,这本身就违背了hibernate的设计思想。我敢说,你的物理表的主键肯定是有业务意义的(不然也不会有去修改它的需求吧)。 楼上的结论未必准哦,比如我是用oracle的sequence,现在要改成hilo或uuix的,这并不过分吧,同样不涉及到业务处理。对于楼主来讲,得看你要把主键改成什么样子了,你原来的主键是什么样子的。如果条件满足的话,直接更新主键也是可以的。 呵呵,什么叫增加物理主键会破坏对象间的约束关系啊?如果你用业务主键的话,以后万一需求更改,你的业务主键不再具有唯一性,那你就会死的很惨了。hibernate提供了assigned来提供对以前数据库这种设计的支持,但是推荐使用物理主键,是有原因的。比如举一个简单的例子来说:一个用户有一个userid,它可以作为主键,但是如果以后要求一个用户可以有多个帐号,你就没办法再进行匹配了。用物理主键的好处就是永远不会和用户需求冲突,所以涉及不到主键会更改的现象,除非是我上面所讲的那种比较变态的要求。 各有各的实现方法!能实现就是好的方法!当然前提是能通过一切测试,和易于管理!用逻辑主键OID来标识一个物理主键,多个用户用外键匹配! 我觉得还是尽量用物理主键吧,这是hibernate提倡的,省心。 hibernate4 在用annotation映射是老是出错,为什么呀 spring Aop 问题 【围观】一个看似非常简单的问题 detachedCriteria 一个Hibernate使用存储过程的示例报错!请帮助检查! 请教 判断日期是否过期 请高手解释下Java Application Platform SDK到底是个啥? 求助高手,如何用会话bean实现文件加密 weblogic7配置连接池问题 jboss+jbuilder7 大家讨论下,用Struts,大家一般还用什么标签库?(来者有分) 如何安装j2eesdk?
在hibernate中,我们操作的都是domain object,而每个domain object是需要一个逻辑主键来进行唯一标识。这个主键必须唯一,无业务含义,不可修改。在大部分情况下,我们会映射到物理表的物理主键上。
你寻求修改主键的方法,这本身就违背了hibernate的设计思想。我敢说,你的物理表的主键肯定是有业务意义的(不然也不会有去修改它的需求吧)。
对于楼主来讲,得看你要把主键改成什么样子了,你原来的主键是什么样子的。如果条件满足的话,直接更新主键也是可以的。
如果你用业务主键的话,以后万一需求更改,你的业务主键不再具有唯一性,那你就会死的很惨了。hibernate提供了assigned来提供对以前数据库这种设计的支持,但是推荐使用物理主键,是有原因的。比如举一个简单的例子来说:一个用户有一个userid,它可以作为主键,但是如果以后要求一个用户可以有多个帐号,你就没办法再进行匹配了。
用物理主键的好处就是永远不会和用户需求冲突,所以涉及不到主键会更改的现象,除非是我上面所讲的那种比较变态的要求。