hibernate定义表主键的问题,相信大家都遇到过

tony530520 2005-11-03 01:32:52
hibernate推荐大家使用一个主键,而且最好是与业务无关,只是一个逻辑主键。但是这样做就会有这样一个问题:
假如有这样一个表,有三个字段,id,userid,username.其中id为主键,与业务无关,为一个自增字段。如果我插入2条重复的记录,比如(0001,张三),(0001,张三),都可以插入数据库了。我现在关心的是业务要求不能插入2条userid和username一样的记录,但是因为主键是自增字段,实际上这2条记录时能插入数据库的,请问怎样配置才能不插入2条重复的记录。
请问各位高手怎样解决这个问题啊,保证不重复插入数据。小弟先谢过了

...全文
223 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaofeng3385 2005-11-04
  • 打赏
  • 举报
回复
学习一 下
zeq258 2005-11-03
  • 打赏
  • 举报
回复
建立复合主键主键,是因为对旧系统进行改造的时候不得以才这么做的,

如果是新设计的系统,那么你的主键就不要有任何的实际意义。它仅仅是作为主键,这也是数据库设计的一个指导性原则。

这样以来,如果以后要对系统进行升级或者维护,问题就比较少。因为你的主键没有任何意义,所以不会对系统造成太大的影响。
kill8108 2005-11-03
  • 打赏
  • 举报
回复
我一般是用唯一索引来处理这种问题!!
Yanbin_Q 2005-11-03
  • 打赏
  • 举报
回复
你可以为userid,username建立复合主键,不过一般这种要求都会在代码中进行验证,如果完全通过数据库来合约束,效率会比较低的
WxmJun 2005-11-03
  • 打赏
  • 举报
回复
为userid创建唯一索引啊
didoleo 2005-11-03
  • 打赏
  • 举报
回复
关系数据库学的最重要的一个理论就是:
不要给关键字赋予任何业务意义......

--摘自 <精通Hibernate Java对象持久化技术> --孙卫琴
page 8 中间一段


我觉得如果你不要直接到数据库里操作 insert ....
而是一直用hibernate对象来操作的话,你是没机会插入重复数据的,你用session.saveOrUpdate(hibernateObj) 当 objId 不存在的时候,hibernate是做insert,当objId存在的时候,hibernate是做update而不是insert.

你可以看看孙卫琴hibernate的关于“临时对象”,“持久对象”,“游离对象”的描述


trumplet 2005-11-03
  • 打赏
  • 举报
回复
给数据表增加一个primer key列
tony530520 2005-11-03
  • 打赏
  • 举报
回复
楼上的,我是新设计的,主键没有实际意义,只是一个自增字段。但是就是因为主键没有任何意义,就不能控制业务中重复记录的插入了,我想问问怎么解决这个问题。创建唯一索引是可以,我想问问hibernate自身对这个有控制没有

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧